影刀RPA新手教程:拼多多商品数据自动化采集完整流程(搜索→列表采集→翻页→导出)

做拼多多店群或者竞品分析,每天要盯几十个关键词的搜索结果。
手动复制粘贴效率太低,用影刀RPA可以自动搜索、翻页、采集商品标题/价格/销量,最后存到Excel。

picture.image 我把整个流程拆成4个核心模块: 搜索关键词 → 采集当前页商品列表 → 翻页 → 写入Excel。

picture.image 每个模块都有稳定的元素定位和翻页处理,照着搭就能跑通。


picture.image

一、整体流程设计

步骤子流程核心指令
1A01_打开拼多多并搜索打开网页、输入文本、点击搜索
2B01_采集当前页商品数据获取相似元素列表、提取标题/价格/销量

| 3 | B02_翻页到下一页 | 判断下一页按钮是否存在、点击、等待新页面 | | 4 | C01_写入Excel并保存 | 创建文件、追加行、保存关闭 |

注意: 拼多多搜索页是传统的“下一页”按钮翻页,不是滚动加载,比小红书简单。


二、第一步:打开拼多多并搜索关键词

picture.image

操作步骤

picture.image

picture.image

  1. 打开拼多多首页
    指令:打开网页,URL填 https://www.pinduoduo.com

  2. 等待搜索框加载

    捕获搜索框元素(首页中部)

# 拼多多首页搜索框
//input[@class='search-input']
  1. 输入关键词并搜索
    • 输入文本指令,内容设为变量关键词

picture.image

  • 模拟按键(enter)或点击“搜索”按钮

picture.image

# 搜索按钮
//button[contains(@class,'search-btn')]
  1. 等待搜索结果页加载完成
    等待商品卡片出现
# 商品卡片父容器
//div[@data-testid='goods-card']

批量搜索多个关键词

如果有关键词列表(从Excel读取),外层套一个循环:

关键词列表 = 读取Excel列数据("A2:A10")
循环遍历列表(关键词列表, 当前词)
    输入文本(搜索框, 当前词)
    
![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/2cb79fee6f894db189dbeea8923a4756~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781487980&x-signature=H3KyVTQZYnRdPuqbIDAQqjEUSVM%3D)
    点击搜索按钮
    等待元素出现(商品卡片, 5秒)
    调用子流程(采集当前页数据)

三、第二步:采集当前页商品数据

捕获关键元素(基于商品卡片父容器)

先捕获一个商品卡片作为父元素,然后基于它用相对路径捕获子元素。

# 父元素:商品卡片
//div[@data-testid='goods-card']

# 子元素:商品标题(基于卡片)
.//a[contains(@class,'title')]

# 子元素:价格(拼多多价格在 span 里)
.//span[contains(@class,'price')]

# 子元素:销量(“已拼10万+件”)
.//div[contains(@class,'sales')]

采集逻辑

# 获取当前页所有商品卡片
商品卡片列表 = 获取相似元素列表(商品卡片父元素)

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/4b0055d719284cc1849da0cea45fb68a~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781487980&x-signature=7LwkjrLTeJ1in7no%2BXwt8Lv8GPo%3D)

当前页数据 = []   # 存储本页的商品行

循环遍历列表(商品卡片列表, 当前卡片)
    标题 = 获取元素文本(当前卡片, ".//a[contains(@class,'title')]")
    价格 = 获取元素文本(当前卡片, ".//span[contains(@class,'price')]")
    销量原始 = 获取元素文本(当前卡片, ".//div[contains(@class,'sales')]")
    
    # 清洗销量(去掉“已拼”和“件”,只保留数字)
    销量数字 = 正则提取(销量原始, "\\d+")
    如果 销量数字 == "" 则 销量数字 = "0"
    
    追加到列表(当前页数据, [标题, 价格, 销量数字])

处理价格和销量格式

价格示例: ¥99.00 → 清洗后 99.00
销量示例: 已拼10万+件 → 清洗后 100000(需要处理“万”)

可以用Python代码清洗:

import re

# 清洗价格(去掉¥符号)
price_clean = re.sub(r'[^0-9.]', '', price_raw)

# 清洗销量(处理“万”)
sales_raw = "已拼10万+件"
if '万' in sales_raw:
    num = re.search(r'(\d+(?:\.\d+)?)', sales_raw).group(1)
    sales_clean = int(float(num) * 10000)
else:
    sales_clean = int(re.search(r'\d+', sales_raw).group(0))

四、第三步:翻页到下一页

拼多多搜索页有明确的“下一页”按钮,最后一页按钮会变成灰色或消失。

捕获下一页按钮

# 下一页按钮(未禁用状态)
//a[contains(@class,'next') and not(contains(@class,'disabled'))]

翻页循环逻辑

当前页码 = 1
最大页码 = 20   # 防护

循环 当 当前页码 <= 最大页码
    输出日志("正在采集第" + 当前页码 + "页")
    
    # 采集当前页数据
    调用子流程(B01_采集当前页, 输出={本页数据: 页数据})
    全部数据 = 全部数据 + 页数据
    
    # 判断是否有下一页
    判断元素是否存在(下一页按钮, 有下一页)
    
    如果 有下一页 == False
        输出日志("已到最后一页,停止翻页")
        跳出循环
    
    # 点击下一页
    鼠标点击(下一页按钮, 点击方式=模拟点击)   # 拼多多反爬,用模拟点击更稳
    # 等待新页面的商品卡片出现
    等待元素出现(商品卡片, 8秒, 超时)
    如果 超时 == True
        输出日志("翻页超时,停止")
        跳出循环
    
    当前页码 = 当前页码 + 1

翻页注意事项

  • 拼多多翻页后URL会变(page=2),也可以用URL拼接法(参考选题池16号)
  • 点击下一页后必须等待新页面的商品卡片,不要用固定等待
  • 如果翻页后元素高亮位置偏移,加滚动到元素指令

五、第四步:写入Excel

创建Excel文件并写入表头

创建Excel文件("C:\拼多多采集结果.xlsx")   # 如果文件不存在
打开Excel("C:\拼多多采集结果.xlsx", Excel对象)
写入行数据到表格(Excel对象, "A1", ["标题", "价格", "销量"])

写入所有采集到的数据

循环遍历列表(全部数据, 单行数据)
    追加行到表格(Excel对象, 单行数据)

保存并关闭

保存Excel(Excel对象)
关闭Excel(Excel对象)
输出日志("采集完成,共" + 长度(全部数据) + "条商品")

六、完整流程代码(逻辑结构)

主流程:
    # 参数设置
    关键词 = "运动鞋"
    最大翻页数 = 10
    全部数据 = []
    
    # 1. 打开并搜索
    调用子流程(A01_打开拼多多并搜索, 输入={关键词: 关键词})
    
    # 2. 翻页循环
    当前页码 = 1
    循环 当 当前页码 <= 最大翻页数
        输出日志("第" + 当前页码 + "页")
        
        # 采集当前页
        调用子流程(B01_采集当前页商品, 输出={本页数据: 页数据})
        全部数据 = 全部数据 + 页数据
        
        # 翻页判断
        判断元素是否存在(下一页按钮, 有下一页)
        如果 有下一页 == False
            跳出循环
        
        鼠标点击(下一页按钮, 点击方式=模拟点击)
        等待元素出现(商品卡片, 8秒, 超时)
        如果 超时 == True 则 跳出循环
        
        当前页码 = 当前页码 + 1
    
    # 3. 写入Excel
    调用子流程(C01_写入Excel, 输入={数据: 全部数据, 文件路径: "C:\拼多多_运动鞋.xlsx"})

七、常见问题速查

问题原因解决方法
捕获到的商品卡片XPath带[1]直接捕获了第一个卡片删掉下标,保留//div[@data-testid='goods-card']
价格提取出来是空价格在伪元素里或动态加载等待元素出现后再取,或用获取元素属性('innerText')
销量带“万”转换后不对小数处理错误,如“1.2万”float(数字)*10000,不要用int
翻页后采集的还是第一页数据没等待新页面加载完等待元素出现(商品卡片) 且确保XPath不依赖页面URL
拼多多弹出验证码采集频率过高每次翻页后随机等待3-5秒,或用代理IP
社区版30分钟不够翻页+等待耗时减少最大翻页数(5页以内),或升级创业版

八、扩展功能

1. 采集商品详情页

如果需要采集商品详情(如品牌、发货地、评价数),可以在采集列表时拿到商品链接,再逐个打开详情页采集。

获取商品链接:

.//a[contains(@class,'title')]/@href

2. 按价格/销量排序

拼多多搜索页有排序按钮(综合/销量/价格)。
点击排序按钮后再采集,需要重新捕获排序后的商品列表。

# 点击“销量”排序
//div[contains(text(),'销量')]

3. 定时自动运行

配合影刀的“定时触发器”(创业版及以上),每天固定时间跑采集。


推荐资源

  • 影刀官方学院: “实战案例——拼多多商品数据采集”(视频教程)
  • 我的文章联动:
    • 翻页详细方案:[翻页逻辑的3种实现方式(选题池16号)]
    • 元素定位稳定性:[网页元素捕获的4种稳定性提升方法(选题池1号)]
    • 数据清洗:[从文本中提取数据的4种方法(选题池19号)]
  • 小工具: XPath Helper插件,测试拼多多页面元素XPath是否稳定

作者:林焱

本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。

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