影刀RPA深度教程:电商采集实战(淘宝+拼多多+反爬策略)

电商数据采集是影刀最经典的场景。这篇讲淘宝和拼多多的实战采集,附带反爬应对方案


先装好环境

www.yingdao.com 下载,社区版免费。装完去Chrome装影刀插件。


第一部分:淘宝搜索结果采集(完整案例)

需求

在这里插入图片描述

输入关键词"手机壳",采集前5页的:商品标题、价格、销量、店铺名、商品链接。

完整流程骨架

1. 启动浏览器(Chrome)
2. 拼接URL:https://s.taobao.com/search?q=手机壳
3. 跳转网址
4. 等待商品列表加载完成(等待元素出现://div[@class='items'])
5. 设置变量:page_count = 1

6. While 条件:page_count <= 5
   a. 获取相似元素:商品列表的每个商品块
   b. ForEach循环每个商品块
      - 获取标题(子元素://a[@class='item-title'])
      - 获取价格(子元素://span[contains(@class,'price')])
      - 获取销量(子元素://span[contains(@class,'sale')])
      - 获取店铺名(子元素://a[contains(@class,'shop')])
      - 获取链接(获取href属性)
      - 写入Excel一行
   c. 点击"下一页"按钮
   d. 等待页面刷新(等待元素出现:下一页按钮的高亮状态)
   e. page_count = page_count + 1

7. 保存Excel,关闭浏览器

关键XPath(淘宝)

商品标题:

//a[contains(@class,'item-title')]

价格(有多种class,用contains):

//span[contains(@class,'price')]

销量:
在这里插入图片描述

//span[contains(text(),'人付款')]   ← 文字包含"人付款"

店铺名:

//a[contains(@class,'shop-name')]

下一页按钮:

//a[contains(@class,'next') and not(@disabled)]

判断下一页是否disabled(最后一页):

//a[contains(@class,'next')][@disabled]

[video(video-pofYftaZ-1783094833720)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限!)]

如果找到这个元素,说明已经是最后一页,退出循环。

坑点1:淘宝动态渲染,元素加载慢

解决: 不要用固定等待,用"等待元素出现":
在这里插入图片描述

等待元素出现://div[@class='items']
超时:15秒

如果15秒还没加载出来,说明可能触发了验证码。

坑点2:登录验证

淘宝搜索不需要登录,但如果频繁访问,会弹出滑块验证码。

应对策略:

  1. 每次请求后随机等待2-5秒(用Python生成随机数)
  2. 用"图像识别-点击"指令处理滑块(简单滑块可以过)
  3. 高频采集建议用代理IP

第二部分:拼多多搜索结果采集

拼多多的特殊性

拼多多的页面是动态渲染的(类似React),元素定位和淘宝不同,而且反爬更严格。

在这里插入图片描述

关键XPath(拼多多)

拼多多的class名是动态生成的(如cls-12345),不能用class定位。

用其他属性定位:

//div[@data-testid='beast-core-generic-card']

拼多多有些元素有data-testid属性,这个比较稳定。

按文字内容定位商品价格:

//span[contains(text(),'¥')]

取商品链接(拼多多的链接在data-href属性里,不是href):

指令:获取元素属性
属性名:data-href
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/040ef6f562e84678af217073319b225f.png#pic_center)

保存到变量:goods_url

拼接完整URL:"https://mobile.yangkeduo.com/" + goods_url

翻页处理(拼多多是滚动加载,不是翻页按钮)

拼多多搜索结果是滚动到底部自动加载更多,不是点击"下一页"。

处理思路:

设置变量:previous_count = 0
设置变量:current_count = 获取当前商品数量()

While 条件:current_count > previous_count 且 page_count < 5
  → 滚动到页面底部
  → 等待2秒(等内容加载)
  → previous_count = current_count
  → current_count = 重新获取商品数量()
  → page_count = page_count + 1

如果 current_count == previous_count(两次数量一样,说明没有更多内容了)
  → 退出循环

滚动到底部的指令:

指令:执行JavaScript
代码:window.scrollTo(0, document.body.scrollHeight);

第三部分:反爬策略完全攻略

策略1:随机等待时间

在这里插入图片描述

固定等待太规律,容易被识别。用随机等待

指令:Python代码
代码:
  def main(args):
      import random
      wait_time = random.uniform(2, 5)  # 2到5秒之间的随机数
      import time
      time.sleep(wait_time)
      return {'wait_time': wait_time}

策略2:模拟真人操作

真人在浏览页面时,会:

  • 滚动页面(不是瞬间跳到底部)
  • 鼠标移动(不是直接点击)
  • 有时会在页面停留很久

模拟滚动(逐步滚动,不是一下子滚到底):

指令:Python代码
代码:
  def main(args):
      import time
      for i in range(10):  # 分10次滚动
          js = "window.scrollBy(0, 300)"  # 每次滚动300px
          # 需要在网页对象上执行JS,这里简化
          time.sleep(0.2)
      return {}

策略3:更换User-Agent

有些网站通过User-Agent识别爬虫。

在这里插入图片描述

指令:设置User-Agent(在启动浏览器之前)
User-Agent字符串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

策略4:使用代理IP

高频采集时,同一个IP会被封。

指令:设置代理
代理类型:HTTP/HTTPS
代理地址:your_proxy_ip:port
用户名/密码:(如果需要认证)

代理IP来源:

  • 免费代理(不稳定,适合测试)
  • 付费代理服务(如快代理、熊猫代理,稳定)

策略5:Cookie复用(模拟已登录状态)

temu店群自动化报活动案例

如果网站对未登录用户限流,可以先手动登录,然后让影刀复用登录态。

在这里插入图片描述

1. 手动在影刀启动的浏览器里登录淘宝/拼多多
2. 登录完成后,影刀会自动保存Cookie
3. 下次启动浏览器时,Cookie自动带上,不需要重新登录

注意: 不要用影刀同时开多个浏览器窗口,Cookie可能会串。


第四部分:数据存储与去重

问题:重复采集同一条数据

翻页时可能采集到重复的商品(比如第1页最后一条和第2页第一条是同一个)。

解决方法:用商品ID去重

1. 启动Excel,读取已采集的数据(如果有的话)
2. 提取所有已采集的商品ID,保存到列表:collected_ids
3. 采集新数据时:
   If 当前商品ID 在 collected_ids 里
     → 跳过(不写入Excel)
   Else
     → 写入Excel
     → 把当前商品ID加入 collected_ids

商品ID怎么取?
淘宝商品URL里包含商品ID:
在这里插入图片描述

https://detail.tmall.com/item.htm?id=123456789

用正则表达式提取ID:

指令:正则表达式匹配
文本:goods_url
正则表达式:id=(\d+)
保存结果到:goods_id

第五部分:完整代码模板(可直接用)

淘宝采集模板(伪代码)

启动浏览器
跳转网址:"https://s.taobao.com/search?q=" + keyword
等待元素出现://div[@class='items'],超时15秒

设置变量:page = 1
设置变量:max_page = 5
设置变量:all_data = []

While 条件:page <= max_page
  → 获取相似元素列表://div[contains(@class,'item')],保存到:items
  → ForEach循环:items
        → 获取标题://a[contains(@class,'item-title')],保存到:title
        → 获取价格://span[contains(@class,'price')],保存到:price
        → 获取销量://span[contains(text(),'人付款')],保存到:sales
        → 列表追加:all_data 追加 [title, price, sales]
  → 点击://a[contains(@class,'next')]
  → 等待元素出现://div[@class='items'](确认新页面加载完成)
  → page = page + 1
  → 随机等待2-5秒(调用前面的Python代码)

启动Excel,打开结果文件
写入Excel:all_data(批量写入)
保存并关闭Excel
关闭浏览器

第六部分:常见报错与解决

报错 原因 解决
元素未找到(商品列表) 页面被验证码拦截 加Try-Catch,失败时截图,换IP
获取到的价格为空 价格是动态加载的,还没渲染出来 加等待1秒,再获取
翻页后还是同一批数据 页面没刷新,元素还是旧的 在点击下一页后,加"等待元素消失"确认旧列表消失
在这里插入图片描述

| 写入Excel时报错 | 商品标题里有特殊字符(如/ :) | 用"文本替换"把特殊字符替换掉 |
| 流程跑得很慢 | 每采集一条都写入Excel | 先在内存里攒数据,最后批量写入 |


更多电商采集案例和完整流程模板,可以在 home.linyan.cloud 查找。

#影刀RPA #电商采集 #淘宝 #拼多多 #反爬策略

作者:林焱

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐