淘宝是国内电商数据采集中最复杂的平台之一。它的页面结构复杂、反爬策略严格、价格和SKU的展示方式多种多样。很多人在拼多多、小红书能跑通的采集流程,一到淘宝就频频翻车。
淘宝采集最大的难点不是元素定位,而是价格和SKU的解析逻辑。 这篇文章从淘宝的实际页面结构出发,拆解商品列表页和详情页的采集方法,以及SKU价格解析的完整流程。新手按这个流程走,能避开大多数坑。
淘宝商品采集的整体流程设计
淘宝采集的标准流程分为四个阶段:
阶段一:登录与登录态检查

阶段二:关键词搜索 + 列表页采集
阶段三:详情页采集(标题、价格、SKU、销量、评价)
阶段四:数据清洗与写入
淘宝对采集行为的敏感度很高,每个阶段都要注意请求频率和防限流策略。下面逐个展开。
阶段一:登录态处理
淘宝的登录态管理和拼多多、小红书都不一样。淘宝的Cookie有效期较长(通常7-15天),但登录状态对IP环境很敏感——换了IP,Cookie可能就失效了。
登录流程:
- 打开淘宝首页:
https://www.taobao.com
2. 检查登录状态:用“判断元素是否存在”检查页面右上角是否有用户头像或“我的淘宝”链接
- 如未登录:
- 点击“登录”按钮
- 淘宝登录支持账号密码和扫码两种方式
- 推荐使用扫码登录(避免密码输入过程中被拦截)
- 登录成功后,用“保存浏览器环境”保存Profile
登录检查的XPath参考:
# 检查登录状态的元素:用户头像

//*[@class="J_MiniProfile"]//img
# 或者检查“我的淘宝”链接
//*[contains(text(),"我的淘宝")]
容易踩的坑: 淘宝登录页可能会弹出滑块验证。滑块验证在影刀中较难自动处理,建议首次登录时手动完成,然后保存浏览器环境。后续运行加载该环境即可跳过登录。
阶段二:搜索与列表页采集
搜索操作:
- 在淘宝首页搜索框中输入关键词
- 点击搜索按钮(或按回车键)
- 等待搜索结果加载完成
搜索结果页的注意点:
- 淘宝搜索结果页默认是“综合排序”,如果采集“最新”或“销量”排序的数据,需要切换到对应的Tab
- 切换排序后页面会重新加载,需要重新等待元素加载
- 搜索结果中可能混入“直通车”广告商品(带有“广告”或“推广”标识),采集时建议过滤
列表页采集的XPath参考:
# 捕获元素:搜索结果页的商品卡片容器
//*[contains(@class,"items")]//*[contains(@class,"item")]
# 捕获元素:商品标题

//*[@class="title"]//a
# 捕获元素:商品价格(列表页)
//*[@class="price"]//*[@class="value"]
# 捕获元素:商品图片
//*[@class="pic"]//img
# 捕获元素:店铺名称
//*[@class="shop"]//a
# 捕获元素:收货人数(月销量)
//*[@class="deal-cnt"]
列表页翻页的XPath参考:
# 捕获元素:下一页按钮
//*[@class="pagination"]//*[contains(text(),"下一页")]
# 捕获元素:当前页码(用于验证)
//*[@class="pagination"]//*[@class="current"]
阶段三:详情页采集(核心难点)
淘宝商品详情页是所有平台里最复杂的。价格和SKU的解析逻辑因人而异,下面分几种情况。
情况一:固定价格商品(无SKU)
最基础的场景,页面上只有一个价格,直接采集即可。
# 捕获元素:商品标题
//*[@id="J_ProductTitle"]//text()
# 捕获元素:商品价格(固定价格,无SKU)
//*[@id="J_StrPrice"]//text()
情况二:SKU多规格商品(有颜色/尺码/版本选项)
这是淘宝最常见的场景。不同的SKU对应不同的价格,需要先解析出所有SKU及其价格。
SKU数据的获取方式:
淘宝的SKU数据通常存储在JavaScript变量中,用影刀的“获取元素文本”直接抓取比较困难。我用的方法是:
- 在详情页中找到SKU选择的容器
- 获取所有SKU选项的文本和对应的价格
- 组装成SKU列表
SKU定位的XPath参考:
# SKU容器(颜色/尺码/版本分类)
//*[contains(@class,"sku")]//*[contains(@class,"prop")]
# 获取所有SKU选项(如颜色选项)
//*[contains(@class,"sku")]//*[contains(@class,"item")]
# 获取当前选中的SKU价格(点击SKU后才会更新)
//*[@id="J_StrPrice"]//text()
SKU采集的流程设计:
1. 等待详情页加载完成(等待元素加载:商品标题,超时20秒)
2. 获取所有SKU选项列表(如颜色、尺码等维度)
3. 遍历每个SKU选项:
a. 点击该SKU选项
b. 等待0.5-1秒(等价格更新)
c. 采集当前价格
d. 记录:SKU名称 + 价格
4. 采集完成后,所有SKU数据存入列表
情况三:价格区间商品
有些商品没有明确的SKU列表,但价格显示为区间价(如“¥29.90-¥59.90”),通常对应不同的规格或套餐。
处理方式:采集价格区间的下限和上限,分别存入两个字段。
# 捕获元素:价格区间文本
//*[contains(@class,"price")]//text()
# 采集到的数据示例:"¥29.90-¥59.90"
# 用Python指令解析:下限29.90,上限59.90
阶段四:数据清洗与写入
淘宝采集的数据需要做几项关键清洗。
清洗一:价格数值提取
# Python指令:淘宝价格清洗
# 输入:原始价格文本(如"¥29.90"、 "29.90-59.90"、 "¥29.90起")
# 输出:清洗后的数字(列表)
import re
def clean_taobao_price(price_str):
"""
清洗淘宝价格文本
返回:[最低价, 最高价]
如果是固定价格,最高价返回None
"""
if not price_str:
return [None, None]
# 移除¥符号
cleaned = re.sub(r'[¥¥]', '', price_str)
# 处理价格区间
if '-' in cleaned or '~' in cleaned:
parts = re.split(r'[-~]', cleaned)
low = re.sub(r'[^0-9.]', '', parts[0])
high = re.sub(r'[^0-9.]', '', parts[1])
return [float(low), float(high)] if low and high else [None, None]
else:
# 固定价格
cleaned = re.sub(r'[^0-9.]', '', cleaned)
return [float(cleaned), None] if cleaned else [None, None]
清洗二:销量单位转换
淘宝的销量显示有“xxx人收货”、“xxx件”等格式,超过1万会显示“1.2万”。
def convert_sales(sales_str):
"""将销量文本转为纯数字"""
if not sales_str:
return 0
# 提取数字
sales_str = sales_str.replace('万', '')
if '万' in sales_str:
# 如果是"1.2万"格式
return int(float(sales_str) * 10000)
else:
# 普通数字
return int(re.sub(r'[^0-9]', '', sales_str))
清洗三:去重
同一批采集可能有重复数据(比如翻页时采集到相同商品)。建议在写入Excel前做一次去重:
# Python指令:按商品ID去重
def deduplicate_by_id(data_list, id_index=0):
"""按指定索引字段去重,保留第一次出现的记录"""
seen = set()
unique_data = []
for row in data_list:
row_id = row[id_index]
if row_id not in seen:
seen.add(row_id)
unique_data.append(row)
return unique_data
淘宝采集的防限流策略
淘宝是所有平台里对采集最敏感的。以下策略来自我多次被封后的经验总结。
策略一:请求间隔拉长
| 操作 | 建议间隔 |
|---|---|
| 每次搜索请求 | 5-8秒 |
| 每次翻页 | 3-5秒 |
| 进入详情页 | 5-10秒 |
| 每个SKU点击 | 1-2秒 |
| 换关键词 | 10-15秒 |
策略二:单次采集量控制
- 单个关键词建议最多采集5页(约200个商品)
- 如果要采集更多,分多个时间段执行
- 单次流程总时长控制在15分钟以内
策略三:限流信号检测
在流程中加入限流检测:
# 检测是否触发限流
# 限流特征:出现验证码页面、滑块验证、或"访问过于频繁"提示
//*[contains(text(),"验证") or contains(text(),"频繁")]
# 如果检测到限流:
# 1. 截图保存
# 2. 输出日志:"[WARN] 检测到淘宝限流,暂停当前采集"
# 3. 跳出循环
# 4. 发送告警通知
采集数据字段标准模板
| 字段名 | 数据来源 | 清洗方式 |
|---|---|---|
| 商品ID | 详情页URL提取 | 正则提取数字 |
| 商品标题 | 详情页 | 去除前后空格 |
| 店铺名称 | 详情页 | 直接取值 |
| 店铺类型 | 详情页 | 天猫/淘宝 |
| 当前售价 | 详情页 | 价格清洗函数 |
| 原价(划线价) | 详情页 | 价格清洗函数 |
| 价格区间下限 | 详情页 | 价格清洗函数 |
| 价格区间上限 | 详情页 | 价格清洗函数 |
| 月销量 | 详情页 | 销量转换函数 |
| 评价数 | 详情页 | 提取数字 |
| SKU明细 | 详情页 | 列表形式保存 |
| 采集时间 | 系统时间 | 标准日期格式 |
推荐资源
- 淘宝开放平台:如果是正规商业用途,建议申请淘宝开放平台的API接口,比爬虫稳定且合法。
- 影刀官方-淘宝采集模板:影刀流程市场有官方提供的淘宝采集模板,可以直接下载参考。
- 社区版限制提醒:淘宝采集的数据量大、耗时长,建议使用创业版突破30分钟限制。创业版还支持多浏览器实例并行采集,效率更高。
#影刀RPA #RPA自动化 #淘宝商品采集 #电商自动化 #SKU解析 #数据清洗
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
