欢迎光临
我们一直在努力

影刀RPA新手教程_网页表格数据提取完全指南HTML表格到Excel的标准流程

影刀RPA新手教程:网页表格数据提取完全指南——HTML表格到Excel的标准流程

电商后台、数据平台、政府数据网站……大量有价值的数据都藏在网页的表格里。

手工复制粘贴?翻10页表格要花多久?

影刀RPA可以把这件事完全自动化:打开页面,识别表格,提取数据,存到Excel,一气呵成。


在这里插入图片描述

一、先区分两种网页表格

类型1:标准 HTML 表格(<table> 标签)

这类表格用浏览器开发者工具看,HTML 结构是:

<table>
<thead>
<tr><th>商品名</th><th>价格</th><th>销量</th></tr>
</thead>
<tbody>
<tr><td>连衣裙</td><td>¥89</td><td>1234</td></tr>
<tr><td>T恤</td><td>¥59</td><td>5678</td></tr>
</tbody>
</table>

影刀处理方式:直接用"获取相似元素列表"配合 XPath 遍历 <tr> 行。

类型2:用 div 模拟的表格

在这里插入图片描述

现代网页很多表格不用 <table> 标签,而是用一堆 <div> 拼出来的,结构类似这样:

<div class="table-row">
<div class="col-name">连衣裙</div>
<div class="col-price">¥89</div>
<div class="col-sales">1234</div>
</div>

影刀处理方式:定位外层容器(一行对应一个div.table-row),获取相似列表,再从每行里取各列数据。

拼多多店群自动化报活动上架!

识别方法:F12 开发者工具,点击表格某行,看最外层是 <table><tr> 还是 <div>。


在这里插入图片描述

二、标准 HTML 表格的提取流程

步骤1:定位表头,确定列的 XPath

先用 F12 看一下表格的结构,确认每列的 XPath:

# 第一行第一格(通常是标题)
//table//tr[1]/th[1]

# 数据行(从第二行开始,跳过标题)
//table//tbody/tr

# 某一数据行里的第2格
.//td[2]

步骤2:在影刀里配置提取逻辑

# 获取所有数据行
获取相似元素列表("//table//tbody/tr") > 行列表

# 新建结果表
新建表格对象 > 结果表
写入行数据(结果表, ["商品名", "价格", "销量", "店铺"])

# 遍历每一行
遍历列表(行列表, 当前行元素):
商品名 = 获取元素文本(当前行元素 + "/.//td[1]")
![在这里插入图片描述](https://iblog.csdnimg.cn/direct/7b1f662d32d14a86b7462ece211abf3a.png#pic_center)

价格 = 获取元素文本(当前行元素 + "/.//td[2]")
销量 = 获取元素文本(当前行元素 + "/.//td[3]")
店铺 = 获取元素文本(当前行元素 + "/.//td[4]")

写入行数据(结果表, [商品名, 价格, 销量, 店铺])

导出表格(结果表, "D:\\采集结果.xlsx")


三、div 模拟表格的提取流程

# 假设每行是一个 class='goods-row' 的 div
获取相似元素列表("//div[contains(@class,'goods-row')]") > 行列表

新建表格对象 > 结果表
写入行数据(结果表, ["商品名", "价格", "销量"])

遍历列表(行列表, 当前行):
# .// 是从当前行内部开始查找
商品名 = 获取元素文本(当前行 + "/.//div[contains(@class,'name')]")
价格 = 获取元素文本(当前行 + "/.//div[contains(@class,'price')]")
销量 = 获取元素文本(当前行 + "/.//div[contains(@class,'sales')]")

写入行数据(结果表, [商品名, 价格, 销量])

导出表格(结果表, "D:\\采集结果.xlsx")


四、带翻页的表格提取

很多表格有分页,每页 20~50 条数据,需要翻到最后一页才能拿完。

翻页类型1:按钮翻页(最常见)

在这里插入图片描述

条件循环(True):
# 先采集当前页
采集当前页数据()

# 判断是否有下一页按钮(且可点击)
判断元素是否存在("//a[text()='下一页' and not(contains(@class,'disabled'))]") > 有下页

如果 有下页:
点击元素("下一页按钮")
等待元素出现("表格数据行", 5)
否则:
跳出循环

翻页类型2:URL 参数翻页(最稳定)

很多网站翻页是通过 URL 参数实现的,比如:

https://example.com/list?page=1
https://example.com/list?page=2

这种情况可以直接构造 URL,循环访问每一页,不用模拟点击:

总页数 = 20 # 先手动确认或用元素提取总页数

遍历数字(1, 总页数+1, 当前页):
url = f"https://example.com/list?page={当前页}"
打开网页(url)
等待元素出现("表格数据行", 8)

![在这里插入图片描述](https://iblog.csdnimg.cn/direct/885f4f8bdf2243a6a48b5f2f739f9c0c.png#pic_center)

采集当前页数据()
输出日志(f"第{当前页}页采集完成")

固定等待(1) # 防止请求太快

翻页类型3:滚动加载(无限滚动)

有些网站表格不分页,而是向下滚动自动加载更多。

上次行数 = 0

条件循环(True):
# 获取当前行数
获取相似元素列表("//div[@class='row-item']") > 当前行列表
当前行数 = len(当前行列表)

如果 当前行数 == 上次行数:
输出日志("没有新内容加载,采集完毕")
跳出循环

上次行数 = 当前行数

# 滚动到页面底部
执行JS("window.scrollTo(0, document.body.scrollHeight)")
固定等待(2) # 等待新内容加载


五、数据清洗(采集后必做)

采集到的数据通常带有多余字符,直接存表格用不了。

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

在这里插入图片描述

常见问题和处理方法:

import pandas as pd
import re

df = pd.read_excel("D:\\采集结果.xlsx")

# 1. 清理价格字段(去掉¥、逗号、空格)
df['价格'] = df['价格'].str.replace(r'[¥,\\s]', '', regex=True)
df['价格'] = pd.to_numeric(df['价格'], errors='coerce')

# 2. 清理销量字段("1.2万"→12000)
def parse_sales(s):
s = str(s).strip()
if '万' in s:
return float(s.replace('万', '').replace('+', '')) * 10000
return float(re.sub(r'[^0-9.]', '', s) or 0)

df['销量'] = df['销量'].apply(parse_sales)

# 3. 去掉完全重复的行
df = df.drop_duplicates()

# 4. 去掉关键字段为空的行
df = df.dropna(subset=['商品名', '价格'])

df.to_excel("D:\\清洗后数据.xlsx", index=False)


六、实战:采集某数据平台的商品榜单

以一个常见的采集场景为例(过程通用,适合举一反三):

目标:采集某电商数据平台的商品热销榜,共10页,每页20条
字段:排名、商品名、类目、价格、30日销量、店铺

流程:
1. 打开榜单页 → 提取标题、设置日期范围
2. 获取总页数(从分页组件取数字)
3. 循环10页 → 每页提取20行
4. 合并200条数据
5. 清洗价格和销量字段
6. 存入Excel,按销量降序排列
7. 飞书推送采集完成通知

关键代码片段:

在这里插入图片描述

# 获取总页数(取分页组件最后一个数字按钮的文本)
获取元素文本("//ul[@class='pagination']//li[last()-1]/a") > 总页数文字
总页数 = int(总页数文字)

# 遍历每页
数据列表 = []

遍历数字(1, 总页数+1, 当前页码):
打开网页(f"https://xxx.com/rank?page={当前页码}")
等待元素出现("//tr[@class='rank-row']", 8)

获取相似元素列表("//tr[@class='rank-row']") > 行列表

遍历列表(行列表,):
排名 = 获取元素文本(+ "/.//td[1]")
商品名 = 获取元素文本(+ "/.//td[2]")
类目 = 获取元素文本(+ "/.//td[3]")
价格 = 获取元素文本(+ "/.//td[4]")
销量 = 获取元素文本(+ "/.//td[5]")
店铺 = 获取元素文本(+ "/.//td[6]")

数据列表.append([排名, 商品名, 类目, 价格, 销量, 店铺])

固定等待(1)

# 存表格
写入Excel(数据列表, "D:\\榜单数据.xlsx")


七、易错速查

问题原因解决
获取相似元素返回空 XPath 写错或页面还没加载 F12 验证 XPath,加等待指令
拿到的文本包含多余空格 HTML 有换行和缩进 Python str.strip() 处理
翻页后数据和上一页一样 没等待新页面加载完 翻页后等待关键元素重新出现
采集到一半网页结构变化 页数不同结构不同 加异常处理,遇到异常截图跳过

#影刀RPA #网页数据采集 #HTML表格提取 #RPA自动化 #影刀新手教程

在这里插入图片描述

作者:林焱

本文为影刀RPA系列文章之一,内容源于实操经验整理与分享。 在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 影刀RPA新手教程_网页表格数据提取完全指南HTML表格到Excel的标准流程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址