影刀RPA实操指南:小红书笔记批量采集从零到交付的完整流程

做小红书数据采集,最让人头疼的不是技术门槛,而是页面结构和反爬机制隔三差五就变。刚写好的流程没跑两天,笔记标题抓不到了,或者滚着滚着页面就白了。我也是非技术背景,一开始用影刀RPA采小红书,光是为了稳定滚动加载就调了两天。

picture.image 这篇专门讲怎么用影刀RPA搭建一个稳定的小红书笔记批量采集流程——从搜索关键词、滚动加载、提取字段,到数据清洗和防限流策略,每一步都有具体操作说明。你照着搭就能用,不用再到处找零散教程拼凑。

整体流程设计与关键词准备

picture.image

一个完整的采集流程包含五个环节:打开搜索页 → 滚动加载笔记列表 → 循环提取每条笔记 → 翻页或继续滚动 → 数据写入Excel。我习惯把每个环节做成独立的子流程,方便后面维护和复用。

在开始之前,先准备一个关键词列表。在影刀的“变量”面板里创建一个列表变量,比如叫{{关键词列表}},内容手动输入或用“读取Excel列”指令从表格导入。流程开头用一个ForEach循环遍历这个列表,每次搜索一个关键词,执行一遍完整采集。

picture.image

为什么要用关键词列表循环? 单次搜索小红书只展示前几百条笔记,多关键词交叉采集能拿到更广的数据。而且每个关键词的搜索结果页面独立,天然降低了被限流的风险。

稳定打开搜索页并等待列表加载

picture.image

小红书搜索页的URL有固定格式,直接拼接关键词即可打开,不需要手动在搜索框输入。

操作步骤:

picture.image

  1. 拖入“打开网页”指令,选择“新建标签页”
  2. URL参数使用变量拼接:https://www.xiaohongshu.com/search_result?keyword={{当前关键词}}&source=web_search_result_notes
  3. 打开后立即加一个“等待页面加载完成”,超时设15秒

picture.image 4. 再用“等待元素出现”捕获列表第一条笔记的封面图,超时设10秒

这里要注意一个坑:小红书搜索页第一次加载时,可能会弹出一个“选择感兴趣的内容”的半屏浮层。如果不关掉,后续滚动会失效。我的做法是在等待元素出现之后,加一个“判断元素是否存在”,检查是否有浮层的关闭按钮,有就点掉。XPath可以写成:

picture.image

# 捕获元素:小红书兴趣选择浮层的关闭按钮
//div[contains(@class,'mask')]//*[contains(@class,'close')]

picture.image

滚动加载:不丢数据的关键策略

小红书笔记列表是无限滚动加载,不像传统翻页。很多人直接用“滚动到页面底部”然后固定延时等待,结果要么漏数据,要么浪费时间。

picture.image

正确的滚动加载逻辑需要三重判断:

  1. 用“获取相似元素列表”捕获当前已加载的所有笔记卡片
  2. 记录当前数量,然后执行一次“滚动到页面底部”
  3. 等待新内容出现——用“等待元素出现”捕获一个新增加的笔记元素(可以用数量变化来判断)

更稳定的方法是用循环+条件判断组合:重复滚动,直到连续两次滚动的笔记数量不再增加,或者页面出现了“没有更多内容”的文字提示。在影刀里这样搭:

  • 创建一个变量{{上次数量}}{{当前数量}}
  • 进入While循环,条件为“True”(靠内部判断跳出)
  • 循环体内:获取相似元素列表,统计数量存到{{当前数量}}
  • 判断{{当前数量}}是否等于{{上次数量}},如果是,跳出循环(说明没有新内容了)
  • 否则,滚动到底部,等待1-3秒(随机化防止限流),更新{{上次数量}}
  • 再加一个安全阀:循环总次数不超过50次,防止死循环

随机等待很重要。 不用每次固定等2秒,可以用“生成随机数”指令生成一个1.5到3.5之间的数字,用作固定延时的时长。影刀里拖入“生成随机数”指令,设置范围,然后作为变量传入“固定延时等待”。

提取笔记信息:XPath该怎么写才稳

小红书前端的class名大部分是哈希值,所以千万不能用class做精确定位。优先使用结构特征和文本特征。

笔记卡片的结构通常是:封面图 → 标题 → 作者信息 → 点赞数。我整理了以下一套相对稳定的XPath:

# 捕获元素:笔记标题(在搜索列表中)
# 通过卡片容器内唯一的h3标签定位,小红书笔记标题基本都用h3
//section//h3

# 捕获元素:笔记作者昵称
# 作者昵称通常在标题下方的一个a标签里,里面包含文本

![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/eeae2388e0cd433aa306211433a4cf71~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1783382495&x-signature=kmaVAQGa%2FlbDup1pqls92EWYLnc%3D)
//section//a[contains(@href,'/user/profile')]

# 捕获元素:笔记点赞数
# 点赞数在卡片底部,通常有一个特定的class模式,但用文本邻近定位更稳
# 通过前面带有"赞"的兄弟元素间接定位,或直接取包含数字的span
//section//span[contains(text(),'赞')]/../preceding-sibling::*[1]

这些XPath的前提是,你已经通过“获取相似元素列表”拿到了每个笔记卡片的section元素。然后在循环体内,以当前循环项的section为根节点,使用.//开头的相对路径来提取,而不是从整个页面搜。

具体操作:在“获取相似元素列表”时,捕获一个完整的笔记卡片section。然后在ForEach循环里,拖入“提取元素文本”,元素定位方式选择“相对定位”,XPath写.//h3。这样只会在当前卡片内查找,避免了跨卡片提取错乱。

作者和点赞数的提取可能偶现为空,因为有些笔记是广告或特殊格式。在提取后加一个“判断元素是否存在”,如果不存在就填“无”,不要让它报错中断。

数据写入Excel与分批保存策略

采集过程可能因为网络波动、页面崩白等原因中断,如果所有数据只在最后一次性写入Excel,一旦中断就全丢了

我的做法是每采集完一个关键词的笔记列表,就立刻写入一次Excel。用“写入行数据到表格”指令,配合“数据表格”变量。先创建一个空的数据表格,每次提取完一条笔记的信息,就用“添加数据行”存入表格变量,采完一个关键词后,一次性将整个表格变量追加写入Excel文件。

影刀的“写入行数据到表格”指令支持追加模式,不会覆盖已有数据。这样即使后续关键词采集崩溃,前面的数据也已经落盘了。

更保险的做法是每采集10条笔记就写一次,在循环体内加一个计数器,满足条件就执行写入。计数器变量用{{计数}},每次循环加1,用“判断”指令检查{{计数}} % 10 == 0

防限流的几个必须遵守的操作

小红书对自动化操作敏感,以下几点是我实测下来能大幅降低被限制概率的措施:

  • 浏览器环境: 用影刀的“打开网页”指令时,一定要勾选“使用系统默认浏览器配置”或者提前配置好一个带登录态的浏览器Profile,别用纯无痕模式。完全无痕的新环境更容易触发验证。
  • 操作间隔随机化: 不只是滚动间隔,点击搜索、打开笔记详情(如果做详情采集)之间的延时全部随机化,范围1.5秒到4秒。
  • 不要频繁切换关键词: 每次搜索完一个关键词,随机休息15到30秒再搜下一个。用“固定延时等待”配合随机数实现。
  • 遇到验证码立刻停止: 在流程中增加一个“判断元素是否存在”,检测是否有滑块验证码或文字验证。一旦出现,输出日志告警并暂停整个流程,不要硬闯。强行继续会导致IP被短时拉黑。

采集过程中常见错误速查

错误现象可能原因修复方案
滚动几次后页面变白触发了反爬或网络请求被限增大滚动间隔,降低采集速度,切换IP重试
笔记标题提取为空页面结构改动,h3标签不再使用用XPath Helper重新确认标题元素标签和路径
获取相似元素列表拿到0个列表尚未渲染,或capture元素选择不典型等待更长时间,或换一个笔记卡片重新捕获
某个关键词采集到一半就卡住特定关键词结果为空或页面异常给每个关键词采集外包裹try-catch,异常跳过关键词

推荐工具: XPath Helper浏览器插件是调整小红书提取逻辑的必备,它能即时显示表达式匹配到几个元素。同时建议关注影刀官方社区中其他用户分享的小红书流程模板,吸取他们的XPath写法可以节省大量试错时间。


#影刀RPA #RPA自动化 #小红书 #批量采集 #数据采集

作者:林焱

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

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