# 影刀RPA新手教程:拼多多商品数据自

影刀RPA新手教程:拼多多商品数据自动化采集——搜索定位→列表采集→翻页→导出

拼多多反爬比淘宝严,直接采集容易出验证码或封IP。

但用对方法——模拟真实用户、随机等待、降低频率——一套流程稳定跑一个月没问题。
这篇从搜索商品到翻页到存Excel,每一步都带上实测能用的XPath和参数设置。


一、整体流程结构

A_初始化(登录+创建文件)
  ↓
B_搜索关键词(输入+点击搜索)
  ↓
  
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/afb9e95855d541eda8e5262854ba338f~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781916897&x-signature=%2FHG3BEx%2FN%2BswtMIydhvIl9qBhBg%3D)
C_循环翻页采集(最多10页)
  ├─ C1_采集当前页商品列表
  └─ C2_点击下一页
  ↓
  
![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/54316f4ce2f2435da58945c1372d5a1e~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781916897&x-signature=5RoDUpDfMhcd%2BgdM9hXT%2FUMAhnw%3D)
D_保存并发送报告

picture.image 耗时:每页约20-30个商品,采集10页约8-12分钟(社区版注意剩余时长)。


二、第一步:登录拼多多(A_初始化)

拼多多网页版需要微信扫码登录,但登录态可以保存。

picture.image

picture.image

操作步骤

  1. 拖入 “打开网页”,URL填https://yangkeduo.com
  2. 拖入 “等待元素出现”,判断是否已登录(如头像或用户名元素)。
  3. 如果未登录,等待用户扫码(弹提示框)。
  4. 登录成功后,用 “保存浏览器状态” 存下cookie,下次直接加载。
# 捕获元素:判断登录状态的用户头像

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/8050d7322c4d4325950f3a04127c2640~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1781916897&x-signature=sBnD7ZnLIenuvSJeHNGWxlf1mMM%3D)
//div[@class="user-avatar"]

第一次运行:手动扫码登录,之后注释掉保存逻辑,改用加载状态。

# 后续运行直接加载
加载浏览器状态(路径="C:\pdd_cookie")
打开网页("https://yangkeduo.com")

三、第二步:搜索关键词(B_搜索关键词)

拼多多首页搜索框比较稳定。

捕获元素

# 搜索输入框
//input[@class="search-input"]

# 搜索按钮(放大镜图标)
//div[@class="search-icon"]

操作指令

picture.image

picture.image

  1. 拖入 “模拟输入”(拼多多建议用模拟输入,触发搜索建议)。
    • 内容:关键词变量(如手机)。
    • 每个字符间隔:80-120毫秒。
  2. 拖入 “点击元素”,点击搜索按钮。
  3. 等待搜索结果列表出现,超时15秒。
# 搜索结果商品列表容器
//div[@class="goods-list-view"]

容易踩的坑
拼多多搜索框有时输入后要等0.5秒再点搜索,否则搜索按钮不可点。加一个“固定等待(500)”在输入之后、点击之前。


四、第三步:采集当前页商品列表(C1_采集单页)

捕获商品卡片容器

拼多多搜索结果页,每个商品是一个div,class含goods-card

//div[contains(@class, "goods-card")]

picture.image

picture.image

在卡片内定位子元素

# 商品标题
.//div[contains(@class, "title")]

# 价格(当前售价)
.//span[contains(@class, "price")]

# 拼团价格/单独购买价格(有时不同)
.//div[contains(@class, "group-price")]

# 已拼件数(销量)
.//div[contains(@class, "sold-count")]

# 商品详情链接
.//a[contains(@class, "title-link")]/@href

采集逻辑(影刀原生指令版)

  1. “获取相似元素列表” 拿到所有商品卡片,存list_商品卡片
  2. “元素列表循环” 遍历。
  3. 在循环内,设置作用域为当前卡片。
  4. “获取元素文本” 分别取标题、价格、销量。
  5. “获取元素属性” 取链接(属性href)。
  6. 将四个值组装成列表,追加到list_本页数据
  7. 循环结束后,把list_本页数据返回主流程或直接写入Excel。

注意

  • 销量文本可能是“10万+”,需要后处理;价格可能是“¥99.00”。
  • 有些商品没有单独价格,要用Try-Catch给默认值。

五、第四步:翻页逻辑(C2_点击下一页)

拼多多搜索结果页有“下一页”按钮,但第1页后URL会带page=参数,也可以直接拼接URL跳转。

方法一:点击下一页按钮(推荐,适应性好)

# 下一页按钮
//a[contains(text(),'下一页')]

翻页循环

  1. 当前页 = 1最大页数 = 10
  2. 进入条件循环,条件:当前页 <= 最大页数 且 下一页按钮存在
  3. 调用C1_采集单页
  4. 写入Excel(每页写一次或累计写)。
  5. 点击下一页。
  6. 等待新页面加载(等待商品列表容器出现,超时15秒)。
  7. 随机等待3-8秒(防反爬)。
  8. 当前页 += 1

方法二:URL拼接(速度快)

拼多多搜索结果的URL示例:
https://yangkeduo.com/search?q=手机&page=1
可以直接循环page参数,用“打开网页”跳转。

# Python代码拼接URL
base_url = "https://yangkeduo.com/search?q=" + 关键词 + "&page="
for 页码 in range(1, 11):
    url = base_url + str(页码)
    打开网页(url)
    等待元素出现(商品列表容器)
    采集当前页()

优点:不需要点击按钮,速度快。
缺点:如果拼多多改了URL规则会失效。建议两种都试,哪个稳定用哪个。


六、第五步:保存到Excel(D_保存)

表头设计

商品标题价格销量商品链接采集时间

操作步骤

  1. 流程开始时创建Excel文件,写入表头。
  2. 每采集完一页,用 “写入区域” 一次性追加该页的所有行。
  3. 全部完成后保存并关闭。

优化

  • 为了防止流程中途崩溃数据全丢,每采集一页就保存一次。
  • 用“获取Excel最后使用行”定位追加位置。
# 伪代码
最后行 = 获取最后使用行("Sheet1")
写入区域("A" + str(最后行+1), 当前页数据列表)
保存Excel()

七、完整代码(指令结构)

A_初始化:
  加载浏览器状态("pdd_cookie")
  打开网页("https://yangkeduo.com")
  创建Excel文件("拼多多采集结果.xlsx")
  写入行数据(1, ["标题","价格","销量","链接","采集时间"])

B_主流程:
  关键词 = "手机"
  最大页数 = 10
  当前页 = 1
  进入元素列表循环(下一页按钮存在):
    输出日志("开始采集第" + 当前页 + "页")
    
    # 采集当前页
    商品卡片列表 = 获取相似元素列表("商品卡片")
    本页数据 = []
    元素列表循环(商品卡片列表):
      设置作用域(当前卡片)
      标题 = 获取文本("标题", 默认="")
      价格 = 获取文本("价格", 默认="")
      销量 = 获取文本("销量", 默认="0")
      链接 = 获取属性("商品链接", "href")
      本页数据.append([标题,价格,销量,链接,当前时间()])
    
    # 写入Excel
    最后行 = 获取最后使用行()
    写入区域("A" + str(最后行+1), 本页数据)
    保存Excel()
    
    # 翻页
    if 当前页 == 最大页数: 跳出循环
    点击元素("下一页")
    等待元素出现("商品列表容器", 超时=15)
    随机等待(3000, 8000)  # 毫秒
    当前页 += 1

  输出日志("采集完成,共" + str(总条数) + "条")

八、拼多多特殊反爬应对

问题解决方法
频繁出现验证码每翻一页随机等待5-10秒,降低到每2秒一个请求以下
商品价格显示为“***”未登录保持登录态,不要退出
销量数据是“10万+”用Python正则提取数字部分,乘以10000换算
采集几页后页面变空白被临时封了,重启浏览器换IP(或加代理)
点击下一页时弹出“访问频繁”加长等待到15秒,或换URL拼接方法

价格与销量清洗示例(Python代码指令)

# 输入:price_str ("¥99.00"), sales_str ("1.2万件")
# 输出:price_num (float), sales_num (int)

import re

# 价格:去掉¥,转数字
price_num = float(re.sub(r'[^0-9.]', '', price_str))

# 销量:处理“万”
sales_str_clean = re.sub(r'[^0-9万]', '', sales_str)
if '万' in sales_str_clean:
    sales_num = int(float(sales_str_clean.replace('万', '')) * 10000)
else:
    sales_num = int(sales_str_clean) if sales_str_clean.isdigit() else 0

九、社区版时长优化建议

  • 用URL拼接翻页代替点击翻页,省去点击+等待动画时间。
  • 每页采集时用“获取相似元素列表”+“循环”比逐个点击进入详情快很多。
  • 数据清洗用Python代码指令(不占时长)。
  • 设置最大页数为5-8页,保证整体在30分钟内。

常见问题速查

问题原因解决方法
搜索后没结果输入太快没触发搜索模拟输入+固定等待500ms再点搜索
商品卡片列表为空XPath不对或页面没加载完加“等待元素出现”超时15秒
下一页按钮找不到最后一页没有按钮用“判断元素是否存在”作为循环条件
价格采集到空拼团价和单独购买价不同尝试多个XPath,用Try-Catch取第一个非空
流程跑20分钟自动停社区版30分钟限制拆分关键词或减少页数

推荐资源

  • 拼多多反爬官方说明:其实没有,但经验是慢就是快
  • 影刀官方拼多多采集模板(市场搜索“拼多多”)。
  • 我的习惯:每次采集前用浏览器无痕模式手动搜一遍,看页面结构有无变化。
  • 扩展阅读:系列第16篇《翻页逻辑的3种实现方式》;系列第28篇《小红书采集》——结构类似。

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

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