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

📅 2026/7/2 20:50:20
影刀RPA新手教程:表格数据批量提取完全指南——网页table、动态列表、无限滚动全攻略
影刀RPA新手教程表格数据批量提取完全指南——网页table、动态列表、无限滚动全攻略作者林焱 | 表格数据采了三年各种坑都踩过写在前面表格数据批量提取是影刀RPA最常用也最容易出问题的场景。网页表格有标准table标签的有div模拟的有无限滚动的有点击加载更多的。不同结构用不同方法选错了就是数据采不全或者采到重复数据。我做过一个电商价格监控项目光表格采集这块就迭代了四个版本才稳定。这篇文章把各种表格类型的采集方法全部讲透附带完整代码和实战案例。模块一安装与指令入口表格数据提取的核心指令在指令区的网页自动化分类下面。最重要的两个指令是“获取相似元素列表和获取元素文本”。获取相似元素列表用来批量捕获表格里同类型的元素比如所有行的第一列。获取元素文本用来读取单个元素的文本内容。还有一个重要指令数据表相关指令在数据表分类下面。用来创建内存中的数据表把采集到的数据存进去最后导出Excel。我当时踩过一个坑采集到的数据直接打印没有存数据表流程一停数据全没了。后来学乖了所有采集到的数据第一时间存数据表流程结束再统一导出。模块二元素定位——表格结构的判断与XPath编写在采集表格数据之前必须先分析表格的DOM结构。按F12打开开发者工具用元素选择器点选表格中的一个单元格。标准表格结构table tr tdtabletrtd商品A/tdtd199元/td/trtrtd商品B/tdtd299元/td/tr/tableXPath定位所有商品名称第一列//table//tr//td[1]div模拟的表格divclasstable-rowdivclasscell商品A/divdivclasscell199元/div/divXPath定位所有商品名称//div[classtable-row]//div[classcell][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模拟的表格动态列表现在很多网站用divcss模拟表格样式不是真正的table标签。这种表格的每一行是一个div每行内的字段也是div。采集步骤第一步用获取相似元素列表指令获取所有行div。XPath//div[classtable-row]第二步FOR循环遍历每一行div。第三步在行div内用相对XPath获取各字段。获取相似元素列表//div[classtable-row]→ list_rows FOR EACH row IN list_rows 获取元素文本row, XPath.//div[classcell-name]→ 名称 获取元素文本row, XPath.//div[classcell-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-price199.00199/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字符串。场景三表格有合并单元格合并单元格用rowspan或colspan属性表示。用JS注入读取每个单元格的实际行数和列数处理跨行跨列的数据对齐问题。模块九平台实战——电商搜索结果页全字段采集用一个完整案例把前面所有知识串起来。案例背景采集某电商网站搜索手机的结果页提取前5页所有商品的商品名称、价格、销量、店铺名称。第一步打开搜索结果页用打开网页指令URL填搜索结果页的URL。第二步等待表格加载完成用等待元素存在指令等待第一个商品名称元素出现。第三步处理标准表格用获取相似元素列表获取所有商品行。XPath//div[classproduct-item]第四步循环提取每个商品的字段FOR循环遍历每个商品行。对每个行元素用相对XPath提取各字段行元素 XPath.//div[classname] → 商品名称 行元素 XPath.//div[classprice] → 价格 行元素 XPath.//div[classsales] → 销量 行元素 XPath.//div[classshop] → 店铺名称每行数据提取完后用数据表添加行保存。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零基础 #数据抓取作者林焱