做拼多多店群,每天要手动搜竞品、复制标题价格、粘贴到表格,几十个店铺根本忙不过来。
解决方法:用影刀把“搜索→采集列表→翻页→写Excel”全自动化。
本文给出一个开箱即用的流程模板,按步骤配置就能跑。
一、整体流程设计
拼多多搜索页采集分为5步:
| 步骤 | 操作 | 对应指令 |
|---|---|---|
| 1 | 打开拼多多并登录 | 打开网页 + 判断登录 |
| 2 | 输入搜索关键词 | 输入文本 + 点击搜索 |
| 3 | 等待商品列表加载 | 等待元素出现 |
| 4 | 循环采集商品卡片 | 获取相似元素列表 + 循环 |
| 5 | 翻页继续采集 | 条件循环 + 点击下一页 |
| 6 | 写入Excel | 追加行 + 关闭 |
前置准备:
- 拼多多账号已登录(建议在浏览器中保持登录态)
- 准备好Excel表头:商品标题、价格、已拼件数、店铺名、商品链接
二、捕获关键元素(拼多多搜索页)
打开拼多多首页(https://mobile.yangkeduo.com),搜索任意词,F12查看结构。
需要捕获的元素清单
| 元素名 | 用途 | XPath参考(手动校验) |
|--------|------|----------------------|
|
input_search | 搜索输入框 | //input[@class='search-input'] |
| btn_search | 搜索按钮 | //div[@class='search-icon'] |
| div_product_card | 商品卡片容器 | //div[@class='goods'] 或 //div[contains(@class,'goods')] |
| txt_title | 商品标题 | {当前卡片}//div[@class='title'] |
|
txt_price | 价格 | {当前卡片}//span[contains(@class,'price')] |
| txt_sales | 已拼件数 | {当前卡片}//div[contains(@class,'sales')] |
| txt_shop | 店铺名 | {当前卡片}//div[contains(@class,'store')] |
| link_detail | 商品链接 | {当前卡片}//a/@href |
| btn_next | 下一页按钮 | //a[contains(text(),'下一页')] |
💡 拼多多的class经常变化,建议用contains模糊匹配。
比如//div[contains(@class,'goods')]比固定class更稳定。
捕获技巧:
- 商品卡片用“捕获元素”点中商品区域的外层div
- 子元素(标题、价格)用右键父元素→“捕获子元素”生成相对路径
三、分步指令实现
步骤1:打开拼多多并确保登录
# 1. 打开拼多多(移动端或PC端,推荐移动端m站)
# 打开网页:https://mobile.yangkeduo.com
# 等待元素出现://input[@class='search-input'](超时5秒)
# 2. 判断是否需要登录
# 判断元素是否存在:“登录”按钮(如 //div[contains(text(),'登录')])
# 如果存在,执行登录子流程(手动扫码或账号密码)
步骤2:输入关键词并搜索
# 输入文本
# 目标元素:input_search
# 文本内容:{keyword}(例如“手机壳”)
# 清空原有内容:是
# 点击搜索
# 目标元素:btn_search
# 点击模式:模拟点击
# 等待列表加载
# 等待元素出现:div_product_card(超时8秒)
步骤3:采集一页的商品数据
# 获取相似元素列表
# 目标元素:div_product_card
# 输出列表:product_cards
# 循环相似元素列表
# 列表:product_cards
# 当前元素变量:card
# 循环体内:

# 1. 获取元素文本(标题)
# 元素路径:{card}//div[@class='title'] → 输出 title
# 2. 获取元素文本(价格)
# 元素路径:{card}//span[contains(@class,'price')] → 输出 price
# 3. 获取元素文本(已拼件数)
# 元素路径:{card}//div[contains(@class,'sales')] → 输出 sales_raw
# 清洗:提取数字(可用Python正则)
# 4. 获取元素文本(店铺名)
# 元素路径:{card}//div[contains(@class,'store')] → 输出 shop
# 5. 获取元素属性(链接)
# 元素路径:{card}//a
# 属性名:href → 输出 link
# 6. 组装一行数据:[title, price, sales_clean, shop, link]
# 7. 追加行到Excel(Excel对象已在主流程打开)

# 循环结束
价格和销量清洗示例(用Python代码指令):
import re
price_raw = get_var("price") # 如 "¥29.9"
price_num = re.search(r'[\d\.]+', price_raw).group()
sales_raw = get_var("sales_raw") # 如 "已拼1.2万件"
match = re.search(r'[\d\.]+', sales_raw)
if match:
num = float(match.group())
if '万' in sales_raw:
sales_num = int(num * 10000)
else:
sales_num = int(num)
else:
sales_num = 0
set_var("price_clean", price_num)
set_var("sales_clean", sales_num)
步骤4:翻页循环
# 条件循环(当“下一页”按钮存在时继续)
# 循环条件:判断元素是否存在(btn_next) == True
# 循环体内:
# 1. 鼠标点击 btn_next
# 2. 固定等待 1 秒
# 3. 等待元素出现 div_product_card(超时8秒)
# 4. 执行“采集一页的商品数据”(调用子流程或复用步骤3)
# 5. (循环末尾,条件会重新判断)
# 条件循环结束
步骤5:写入Excel并保存
# 在主流程开始前,打开Excel(若不存在则创建)
# 打开Excel → excel_obj
# 在每次采集到一行数据后,执行“追加行”
# 所有页面采集完成后
# 关闭Excel(保存)
四、完整流程代码结构(文字版)
A_Main
├─ 1. 打开Excel(路径:C:\pdd_data\result.xlsx)→ excel_obj
├─ 2. 打开拼多多搜索页
├─ 3. 登录判断(若未登录则手动扫码)
├─ 4. 输入关键词(从全局变量或弹窗输入)
├─ 5. 点击搜索
├─ 6. 等待列表出现
├─ 7. 采集第一页数据(调用子流程 C_01_CollectOnePage)
├─ 8. 条件循环(下一页存在)
│ ├─ 点击下一页
│ ├─ 等待新列表
│ └─ 调用 C_01_CollectOnePage
└─ 9. 关闭Excel(保存)
C_01_CollectOnePage(子流程)
├─ 1. 获取相似元素列表(商品卡片)
├─ 2. 循环相似元素列表
│ ├─ 提取标题、价格、销量、店铺、链接
│ ├─ 数据清洗(价格转数字、销量转整数)
│ ├─ 组装行数据列表
│ └─ 追加行到 excel_obj
└─ 3. 返回(无输出参数)
五、避坑指南(拼多多专属)
坑1:反爬机制
拼多多对频繁访问有限制。
解决:每次点击“下一页”后固定等待1~2秒,不要太快。
翻页超过10页容易弹验证码,建议加判断:出现验证码则暂停并报警。
坑2:商品卡片懒加载
滚动后才加载更多商品。
解决:采集前先执行“滚动窗口到底部”,等待0.5秒,再获取相似元素列表。
坑3:价格和销量格式不统一
价格有时是“¥29.9”,有时是“券后价¥19.9”。
解决:正则提取第一个数字;销量可能是“1.2万件”或“3000件”,统一转成数字。
坑4:下一页按钮最后一页会变灰
判断元素存在时,最后一页“下一页”按钮可能还在(disabled状态)。
解决:判断时加上 and not(contains(@class,'disabled')) 或判断元素是否可点击。
六、优化建议
| 问题 | 优化方法 |
|---|---|
| 采集速度慢 | 用“后端点击”翻页 + 缩短等待时间(但小心被封) |
| 数据量大 | 每10页关闭一次Excel重新打开,避免内存爆 |
| 关键词动态 | 用“读取Excel”读关键词列表,外层再套循环 |
| 定时自动跑 | 用影刀“定时任务”功能,每天凌晨跑 |
| 多账号 | 用全局变量保存账号列表,循环登录采集 |
影刀专属操作清单
| 操作 | 精确指令 | 说明 |
|---|---|---|
| 打开拼多多 | 打开网页 | URL用移动版 |
| 捕获商品卡片 | 获取相似元素列表 | 关键指令 |
| 相对定位子元素 | {当前卡片}//子路径 | 循环内用 |
| 点击下一页 | 鼠标点击 + 模式“模拟点击” | 加固定等待 |
| 等待列表出现 | 等待元素出现 | 超时8秒 |
| 追加行到Excel | 追加行 | 每次采集完一行 |
| 数据清洗 | Python代码 | 用正则提取数字 |
版本差异:社区版运行拼多多采集建议每次不超过20页,以免触发反爬。
创业版可配置代理IP。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 搜索后列表不出现 | 搜索框输错了 | 用“清空文本”后再输入 |
| 商品卡片只采到前几个 | 页面未滚动 | 采集前“滚动窗口到底部” |
| 价格提取到空 | 价格在图片里 | 改用“获取元素属性”取data-price |
| 翻页到第N页就停了 | 触发反爬 | 加随机等待(1~3秒) |
| Excel里销量显示“1.2万” | 没清洗 | 加Python转换 |
推荐资源
- 影刀官方模板市场:搜索“拼多多商品采集”,下载参考
- 拼多多反爬策略:建议单次采集不超过30页
- 实操练习:搜索“手机壳”,采集前3页,对比手动复制的时间
最后一句:拼多多采集的核心是稳不是快。
每步加等待、用相对定位、做好数据清洗。这套流程跑通后,每天省下1小时手动复制的时间。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
