影刀RPA新手教程:表格数据批量提取完全指南——网页table、动态列表、无限滚动全攻略

📅 2026/7/2 20:52:51 👁️ 阅读次数 📝 编程学习
影刀RPA新手教程:表格数据批量提取完全指南——网页table、动态列表、无限滚动全攻略

影刀RPA新手教程:表格数据批量提取完全指南——网页table、动态列表、无限滚动全攻略

作者:林焱 | 表格数据采了三年,各种坑都踩过


写在前面

表格数据批量提取,是影刀RPA最常用也最容易出问题的场景。

网页表格有标准table标签的,有div模拟的,有无限滚动的,有点击"加载更多"的。

不同结构用不同方法,选错了就是数据采不全或者采到重复数据。

我做过一个电商价格监控项目,光表格采集这块就迭代了四个版本才稳定。

这篇文章把各种表格类型的采集方法全部讲透,附带完整代码和实战案例。


模块一:安装与指令入口

表格数据提取的核心指令在指令区的"网页自动化"分类下面。

最重要的两个指令是:“获取相似元素列表"和"获取元素文本”。

"获取相似元素列表"用来批量捕获表格里同类型的元素,比如所有行的第一列。

"获取元素文本"用来读取单个元素的文本内容。

还有一个重要指令:"数据表"相关指令,在"数据表"分类下面。

用来创建内存中的数据表,把采集到的数据存进去,最后导出Excel。

我当时踩过一个坑:采集到的数据直接打印,没有存数据表,流程一停数据全没了。

后来学乖了:所有采集到的数据,第一时间存数据表,流程结束再统一导出。


模块二:元素定位——表格结构的判断与XPath编写

在采集表格数据之前,必须先分析表格的DOM结构。

按F12打开开发者工具,用元素选择器点选表格中的一个单元格。

标准表格结构(table > tr > td):

<table><tr><td>商品A</td><td>199元</td></tr><tr><td>商品B</td><td>299元</td></tr></table>

XPath定位所有商品名称(第一列):

//table//tr//td[1]

div模拟的表格

<divclass="table-row"><divclass="cell">商品A</div><divclass="cell">199元</div></div>

XPath定位所有商品名称:

//div[@class='table-row']//div[@class='cell'][1]

带表头的表格

表头在thead里,数据在tbody里,XPath要注意排除表头行。

//table//tbody//tr//td[1]

正则配合XPath过滤数据

有些单元格里混入了不需要的文本,可以用正则先提取再存储。

比如价格文本是"¥199.00 起",用正则(\d+\.?\d*)提取数字部分。


模块三:变量与数据暂存

表格数据通常是批量采集的,需要用变量暂存再统一处理。

列表变量:适合存储单列数据,比如所有商品名称。

变量名:list_product_names 变量类型:列表

用"添加项到列表"指令,把每次循环采集到的名称追加进去。

数据表变量:适合存储多列数据,比如商品名称+价格+销量。

先"创建数据表",定义列名:商品名称、价格、销量。

然后在循环里,每次采集完一行数据,用"数据表添加行"指令写入。

我当时用列表存多列数据,搞了三个列表分别存名称、价格、销量。

后来发现数据对齐很麻烦,改成数据表之后,逻辑清晰了很多。

全局变量控制采集范围

用一个全局变量max_pages控制最多采集多少页。

流程里读取这个变量,达到页数后自动停止,不用改流程代码。


模块四:流程控制——循环采集的三种模式

表格数据采集中,流程控制的核心就是循环。

模式一:FOR计数循环(固定行数)

知道表格总共有多少行,用FOR循环从第1行遍历到最后一行。

FOR i = 1 到 总行数: XPath = //table//tr[POSITION]//td[1] (把 POSITION 替换为变量 i) [video(video-8NNQFJgm-1782934025774)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架!)] 获取元素文本,存入数据表

模式二:WHILE循环(不确定行数)

表格是动态加载的,不知道有多少行,用WHILE循环。

WHILE 存在"下一页"按钮: 获取当前页所有行数据 点击"下一页" 等待页面加载完成

模式三:无限循环+退出条件(动态列表)

根据素材里的经验:如果操作后元素会消失(比如点击"同意"后按钮消失),用无限循环每次点第一个元素。

WHILE TRUE: 获取相似元素列表(所有行的第一个按钮) IF 列表长度 == 0: 退出循环 点击列表[0](第一个按钮) 等待操作完成

循环中的坑:页面刷新导致元素失效

根据素材:如果循环中原网页刷新了,之前获取的相似元素会失效。

正确做法是用FOR次数循环,每次循环内重新获取相似元素列表。

获取相似元素列表,保存到 list_rows(仅获取长度用) FOR i = 0 到 list_rows.length - 1: 重新获取相似元素列表(防止页面刷新导致失效) 取新的列表[i] 进行操作

模块五:网页自动化——三种表格类型的完整采集方案

方案一:标准table标签表格

这是最简单的情况,结构规范,XPath定位精准。

采集步骤

第一步:用"获取相似元素列表"指令,获取所有行元素。

XPath://table//tbody//tr

第二步:用FOR循环遍历每一行。

第三步:在循环体内,用XPath定位该行的各列单元格。

行内定位写法(相对XPath):

.//td[1] 该行第一列 .//td[2] 该行第二列

注意开头的点号,表示相对于当前行元素,不是从根节点开始。

完整指令逻辑

获取相似元素列表(//table//tbody//tr)→ 保存到 list_rows 创建数据表(列:名称、价格) FOR EACH row IN list_rows: 获取元素文本(row, XPath=.//td[1])→ 名称 获取元素文本(row, XPath=.//td[2])→ 价格 数据表添加行(名称, 价格) 数据表写入Excel("输出.xlsx")

方案二:div模拟的表格(动态列表)

现在很多网站用div+css模拟表格样式,不是真正的table标签。

这种表格的每一行是一个div,每行内的字段也是div。

采集步骤

第一步:用"获取相似元素列表"指令,获取所有行div。

XPath://div[@class='table-row']

第二步:FOR循环遍历每一行div。

第三步:在行div内用相对XPath获取各字段。

获取相似元素列表(//div[@class='table-row'])→ list_rows FOR EACH row IN list_rows: 获取元素文本(row, XPath=.//div[@class='cell-name'])→ 名称 获取元素文本(row, XPath=.//div[@class='cell-price'])→ 价格 数据表添加行

坑点:动态加载导致行数变化

页面滚动时会动态加载新行,之前获取的list_rows会过期。

解决方法:每次循环处理完一行后,重新获取list_rows,用索引i取当前行。

或者:每次只处理第一行,处理完删除或标记,然后重新获取列表。

这是素材里提到的"每次点第一个元素"的策略。

方案三:无限滚动表格

社交媒体系列网站常用无限滚动,滚动到底部自动加载更多内容。

采集步骤

第一步:用"在网页上执行JavaScript"指令,滚动到页面底部。

function(element,input){window.scrollTo(0,document.body.scrollHeight);returndocument.body.scrollHeight;}

第二步:等待新内容加载(用"固定等待"或"等待元素存在")。

第三步:判断是否已经加载完所有内容。

判断方法一:比较滚动前后的页面高度,高度不变说明到底了。

判断方法二:出现"没有更多了"的提示文字。

判断方法三:当前已采集的行数达到预期数量。

完整循环逻辑

上次高度 = 0 当前高度 = 执行JS获取页面高度 WHILE 当前高度 > 上次高度: 获取当前所有行数据,存入数据表 执行JS滚动到底部 固定等待 2秒(等待新内容加载) 上次高度 = 当前高度 当前高度 = 执行JS获取页面高度 如果 出现"没有更多了":退出循环

模块六:数据处理——采集后的清洗与转换

从网页上采集到的原始数据,往往不能直接用,需要清洗。

清洗场景一:价格数据去掉货币符号

采集到的价格文本:“¥199.00”、“$29.99”、“29.99元”

用"替换文本"指令,把"¥"、“$”、““元”、”," 全部替换为空。

然后用"转换为数字"指令,转成数字类型,方便后续比较和计算。

清洗场景二:去除空白字符

网页文本前后常有空格或换行符。

用"去除空格"指令,去掉首尾空格。

用"替换文本"指令,把换行符\n和制表符\t替换为空。

清洗场景三:合并相同数据

采集过程中可能因为页面刷新或重复加载,导致数据重复。

用"数据表去重"指令,根据指定列去重。

清洗场景四:筛选有效数据

比如只保留价格大于100的商品。

用"数据表筛选行"指令,条件设为"价格 > 100"。


模块七:鼠标键盘与图像识别的辅助作用

表格数据采集中,有时需要配合鼠标键盘操作。

场景一:滚动加载更多

前面讲过的无限滚动,除了用JS滚动,也可以用模拟鼠标滚轮。

用"鼠标滚动"指令,向下滚动一定距离。

但这种方式不如JS滚动精准,建议优先用JS方案。

场景二:点击"加载更多"按钮

有些表格不是无限滚动,而是有一个"加载更多"按钮。

用"点击元素"指令,捕获并点击这个按钮。

点击后等待新行出现,用"等待元素存在"指令等待新行的第一个单元格出现。

场景三:图像识别定位表格

如果表格结构极其复杂,无法用XPath定位,可以用图像识别。

截取某一列数据的图像作为模板,用"查找图像"指令定位。

但这种方式不稳定,只作为最后兜底方案。


模块八:进阶技能——JS注入提取复杂数据

有些表格数据不是直接存在DOM文本里,而是通过JS动态渲染的。

场景一:数据是存在data属性里的

<tddata-price="199.00">¥199</td>

用"获取元素属性"指令,读取data-price属性值。

或者用JS注入:

function(element,input){returnelement.getAttribute('data-price');}

场景二:数据是异步加载后插入的

页面HTML里没有数据,数据是通过Ajax请求获取的。

用JS注入直接读网页内的JS变量:

function(element,input){// 假设数据存在 window.__INITIAL_STATE__.productListreturnJSON.stringify(window.__INITIAL_STATE__.productList||[]);}

返回后,用"执行Python脚本"指令解析JSON字符串。

场景三:表格有合并单元格

合并单元格用rowspancolspan属性表示。

用JS注入读取每个单元格的实际行数和列数,处理跨行跨列的数据对齐问题。


模块九:平台实战——电商搜索结果页全字段采集

用一个完整案例,把前面所有知识串起来。

案例背景:采集某电商网站搜索"手机"的结果页,提取前5页所有商品的:商品名称、价格、销量、店铺名称。

第一步:打开搜索结果页

用"打开网页"指令,URL填搜索结果页的URL。

第二步:等待表格加载完成

用"等待元素存在"指令,等待第一个商品名称元素出现。

第三步:处理标准表格

用"获取相似元素列表"获取所有商品行。

XPath://div[@class='product-item']

第四步:循环提取每个商品的字段

FOR循环遍历每个商品行。

对每个行元素,用相对XPath提取各字段:

行元素 XPath=.//div[@class='name'] → 商品名称 行元素 XPath=.//div[@class='price'] → 价格 行元素 XPath=.//div[@class='sales'] → 销量 行元素 XPath=.//div[@class='shop'] → 店铺名称

每行数据提取完后,用"数据表添加行"保存。

TEMU店群矩阵自动化运营核价报活动

第五步:翻页

用"点击元素"指令,点击"下一页"按钮。

用"等待元素存在"指令,等待新页面的第一个商品出现。

重复第三步到第五步,直到采集完5页或没有下一页。

第六步:数据清洗

用"数据表"指令,对价格列做清洗:去掉"¥"和",",转成数字。

第七步:导出Excel

用"数据表写入Excel"指令,导出到本地文件。


模块十:系统联动——采集数据的后续处理

表格数据采集完成后,往往需要和其他系统联动。

联动一:写入本地Excel

用"数据表写入Excel"指令,支持xlsx格式。

可以指定工作表名称、是否包含列头、起始单元格位置。

联动二:发送邮件(带附件)

采集完成后,用"发送邮件"指令,把Excel文件作为附件发送给相关人员。

联动三:调用API上传数据

用"发送HTTP请求"指令,把采集到的数据POST到内部系统的API接口。

数据需要先用"执行Python脚本"转成JSON格式。

联动四:写入数据库

用"执行Python脚本"指令,在Python脚本里用pymysql或sqlite3库,把数据写入数据库。


模块十一:工程化规范

当表格采集流程变复杂时,需要做好工程化管理。

规范一:采集字段统一命名

团队内部统一字段命名规范,比如:product_name、product_price、shop_name。

不要用"字段1"、"字段2"这种无意义名称。

规范二:采集失败重试机制

某行数据提取失败时,记录日志,跳过这行继续处理下一行。

不要因为一行数据出错导致整个采集流程中断。

用"尝试捕获错误"指令包住每行数据的提取逻辑。

规范三:采集进度保存

大数据量采集时,每隔一定行数保存一次进度。

如果流程意外中断,可以从上次进度继续,不用重新采集。

实现方法:每采集完一行,把行号写入本地文本文件。

重启流程时,先读取进度文件,从指定行号继续采集。

规范四:反爬应对策略

采集频率不要太高,每次操作后加1-2秒随机等待。

User-Agent可以用"执行Python脚本"随机生成,减少被识别为机器人的概率。


模块十二:速查表与常见报错

XPath定位表格元素速查

需求XPath写法
整个表格//table
所有行//table//tr
排除表头的行//table//tbody//tr
第N行(//table//tr)[N]
第一列(所有行)//table//tr//td[1]
行内第一列(相对XPath).//td[1]
包含特定文本的行//tr[contains(.,‘关键词’)]
div模拟的行//div[@class=‘table-row’]
div模拟的行内字段.//div[@class=‘cell-name’]

常见报错排查

报错现象原因解决方案
获取相似元素列表返回空元素选择器写得不对在F12的Console里用$x()测试XPath
循环中只采集到第一行页面刷新导致元素失效每次循环内重新获取元素列表
采集到的数据有重复滚动加载导致同一行被采集多次记录已采集的ID,去重后再存储
采集到一半流程报超时某一行数据加载慢增大超时时间或用错误处理包住
价格数据包含乱码网页用了自定义字体用JS注入读取实际渲染后的文本

数据清洗正则表达式速查

需求正则表达式
提取价格数字[\d,]+\.?\d*
去掉所有HTML标签<[^>]+>
去掉首尾空格`^\s+
提取中文[\u4e00-\u9fa5]+
提取英文和数字[a-zA-Z0-9]+

总结

表格数据批量提取是影刀RPA的核心能力,也是最容易出问题的地方。

核心思路是:先分析表格结构,再选择合适的采集方案,最后做好数据清洗。

标准table标签最简单,div模拟表格要注意动态加载,无限滚动要用JS辅助。

把所有方案都掌握了,市面上90%的网页表格你都能采。

如果你在表格采集中遇到了本文没覆盖的情况,可以访问 home.linyan.cloud 给我留言。


#影刀RPA #RPA教程 #表格数据提取 #网页表格采集 #动态列表 #无限滚动 #影刀新手 #RPA零基础 #数据抓取

作者:林焱