影刀RPA新手教程:淘宝商品数据采集与SKU价格解析完整流程

淘宝是国内电商数据采集中最复杂的平台之一。它的页面结构复杂、反爬策略严格、价格和SKU的展示方式多种多样。很多人在拼多多、小红书能跑通的采集流程,一到淘宝就频频翻车。

淘宝采集最大的难点不是元素定位,而是价格和SKU的解析逻辑。 这篇文章从淘宝的实际页面结构出发,拆解商品列表页和详情页的采集方法,以及SKU价格解析的完整流程。新手按这个流程走,能避开大多数坑。

picture.image


淘宝商品采集的整体流程设计

picture.image

淘宝采集的标准流程分为四个阶段:

阶段一:登录与登录态检查

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/e8cccdfa1ea34b7f88cec6f62f24dc7d~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783771408&x-signature=1f0jEpEJeuXxKv18l7fhMe4JmJ4%3D)
阶段二:关键词搜索 + 列表页采集
阶段三:详情页采集(标题、价格、SKU、销量、评价)
阶段四:数据清洗与写入

picture.image 淘宝对采集行为的敏感度很高,每个阶段都要注意请求频率和防限流策略。下面逐个展开。


阶段一:登录态处理

picture.image

淘宝的登录态管理和拼多多、小红书都不一样。淘宝的Cookie有效期较长(通常7-15天),但登录状态对IP环境很敏感——换了IP,Cookie可能就失效了。

登录流程:

  1. 打开淘宝首页:https://www.taobao.com

picture.image 2. 检查登录状态:用“判断元素是否存在”检查页面右上角是否有用户头像或“我的淘宝”链接

  1. 如未登录:
    • 点击“登录”按钮
    • 淘宝登录支持账号密码和扫码两种方式
    • 推荐使用扫码登录(避免密码输入过程中被拦截)

picture.image

  • 登录成功后,用“保存浏览器环境”保存Profile

登录检查的XPath参考:

# 检查登录状态的元素:用户头像

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/582e765b233c41c586e483bcf110026c~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783771408&x-signature=%2BO1lEv2ZCtuAHyHtnhNEgDLWgsw%3D)
//*[@class="J_MiniProfile"]//img

# 或者检查“我的淘宝”链接
//*[contains(text(),"我的淘宝")]

容易踩的坑: 淘宝登录页可能会弹出滑块验证。滑块验证在影刀中较难自动处理,建议首次登录时手动完成,然后保存浏览器环境。后续运行加载该环境即可跳过登录。


阶段二:搜索与列表页采集

搜索操作:

  1. 在淘宝首页搜索框中输入关键词
  2. 点击搜索按钮(或按回车键)
  3. 等待搜索结果加载完成

搜索结果页的注意点:

  • 淘宝搜索结果页默认是“综合排序”,如果采集“最新”或“销量”排序的数据,需要切换到对应的Tab
  • 切换排序后页面会重新加载,需要重新等待元素加载
  • 搜索结果中可能混入“直通车”广告商品(带有“广告”或“推广”标识),采集时建议过滤

列表页采集的XPath参考:

# 捕获元素:搜索结果页的商品卡片容器
//*[contains(@class,"items")]//*[contains(@class,"item")]

# 捕获元素:商品标题

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/d983633cf221407289d8d1ce14d31827~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783771408&x-signature=i9X7ALwmHdNRxXrsfnrdLB208JE%3D)
//*[@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的解析逻辑因人而异,下面分几种情况。

picture.image

情况一:固定价格商品(无SKU)

最基础的场景,页面上只有一个价格,直接采集即可。

# 捕获元素:商品标题
//*[@id="J_ProductTitle"]//text()

# 捕获元素:商品价格(固定价格,无SKU)
//*[@id="J_StrPrice"]//text()

情况二:SKU多规格商品(有颜色/尺码/版本选项)

这是淘宝最常见的场景。不同的SKU对应不同的价格,需要先解析出所有SKU及其价格。

SKU数据的获取方式:

淘宝的SKU数据通常存储在JavaScript变量中,用影刀的“获取元素文本”直接抓取比较困难。我用的方法是:

  1. 在详情页中找到SKU选择的容器
  2. 获取所有SKU选项的文本和对应的价格
  3. 组装成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学习手册》系列文章之一,内容源于实操经验的整理与分享。

0
0
0
0
评论
未登录
暂无评论