做小红书运营,每天要手动搜关键词、复制笔记标题和链接、统计点赞数。
解决方法:用影刀自动搜索关键词→采集笔记列表→翻页→写入Excel。
本文给出完整的采集流程,适配小红书网页版(www.xiaohongshu.com)。
一、小红书采集的难点与解决方案
| 难点 | 原因 | 解决方案 |
|---|---|---|
| 页面滚动加载 | 瀑布流,没有传统分页 | 滚动到底部触发加载 |
| 元素class动态 | class名带随机字符串 | 用contains模糊匹配 |
| 登录态要求 | 不登录只能看少量笔记 | 流程开始时登录 |
| 反爬限制 | 频繁访问会弹验证码 | 加随机等待、限制采集条数 |
前置准备:
- 注册小红书账号并登录(建议在浏览器中保持登录态)
- 准备搜索关键词列表(Excel或直接在流程中定义)
二、捕获小红书搜索页的关键元素
打开小红书网页版(https://www.xiaohongshu.com),搜索任意词(如“护肤”),按F12。
需要捕获的元素清单
| 元素名 | 用途 | XPath参考(需手动校验) |
|---|---|---|
input_search | 搜索输入框 | //input[@placeholder='搜索'] 或 //input[@class='search-input'] |
btn_search | 搜索按钮 | //div[@class='search-icon'] |
div_note_card | 笔记卡片容器 | //div[contains(@class,'note-item')] 或 //section[contains(@class,'note')] |
|
txt_title | 笔记标题 | {当前卡片}//a[contains(@class,'title')] |
| txt_author | 作者名 | {当前卡片}//span[contains(@class,'author')] |
| txt_likes | 点赞数 | {当前卡片}//span[contains(@class,'like')]//span[@class='count'] |
| link_detail | 笔记链接 | {当前卡片}//a[contains(@class,'cover')]/@href |
💡 小红书class经常变化,建议用XPath Helper实时校验。
推荐使用相对稳定的属性如data-testid(如果存在)。
捕获技巧:
- 先捕获一个笔记卡片父容器
div_note_card。 - 子元素(标题、作者等)用右键父元素 → “捕获子元素”生成相对路径。
三、完整流程设计
A_Main(主流程)
├─ 1. 打开Excel(准备输出文件)
├─ 2. 打开小红书首页并登录(若未登录)
├─ 3. 输入关键词并搜索
├─ 4. 等待笔记列表出现
├─ 5. 调用子流程 C_01_CollectNotes(采集当前已加载的笔记)
├─ 6. 滚动加载更多(条件循环,直到没有新笔记)
│ ├─ 滚动页面到底部

│ ├─ 等待新笔记出现
│ ├─ 调用 C_01_CollectNotes(采集新笔记,需去重)
│ └─ 判断是否还有“加载更多”或达到上限
└─ 7. 关闭Excel

C_01_CollectNotes(采集当前页面所有笔记)
├─ 1. 获取相似元素列表 div_note_card → list_notes
├─ 2. 循环相似元素列表(当前卡片变量 card)
│ ├─ 提取标题、作者、点赞数、链接
│ ├─ 检查是否已采集过(对比链接)
│ ├─ 若未采集,组装行数据,追加到Excel
│ └─ 记录已采集的链接(存入全局列表)
└─ 3. 返回新采集的数量
四、分步指令详解
步骤1:打开小红书并登录
# 1. 打开小红书网页版
# 打开网页:https://www.xiaohongshu.com
# 等待元素出现:搜索输入框(超时5秒)
# 2. 判断是否需要登录(查找“登录”按钮)
# 判断元素是否存在://div[contains(text(),'登录')] 或 //button[contains(text(),'登录')]
# 如果存在,执行登录子流程(手动扫码或账号密码)
登录处理建议:
首次运行时手动登录一次,后续利用浏览器的Cookie持久化。
在“打开网页”指令的高级设置中,指定固定的用户数据目录。
步骤2:输入关键词并搜索
# 输入文本
# 目标元素:input_search
# 文本内容:{keyword}(如“护肤”)
# 清空原有内容:是
# 点击搜索
# 鼠标点击:btn_search
# 等待笔记卡片出现
# 等待元素出现:div_note_card(超时10秒)
步骤3:采集当前页面笔记(去重)
# 获取相似元素列表
# 目标元素:div_note_card
# 输出列表:note_cards
# 设置局部变量 new_count = 0
# 循环相似元素列表
# 列表:note_cards
# 当前元素变量:card
# 循环体内:
# 1. 获取元素文本(标题)
# 元素路径:{card}//a[contains(@class,'title')] → 输出 title
# 2. 获取元素文本(作者)
# 元素路径:{card}//span[contains(@class,'author')] → 输出 author
# 3. 获取元素文本(点赞数)
# 元素路径:{card}//span[contains(@class,'like')]//span[contains(@class,'count')] → 输出 likes_raw
# 清洗:提取数字("1.2万" → 12000)
# 4. 获取元素属性(链接)
# 元素:{card}//a[contains(@class,'cover')] 或 //a[@href]
# 属性名:href → 输出 link
# 补全:如果链接以 / 开头,前面加 https://www.xiaohongshu.com
# 5. 检查是否已采集(全局变量 g_collected_links 列表)
# 如果 {link} 不在 {g_collected_links} 中:
# - 追加到 g_collected_links
# - 组装行数据:[title, author, likes_num, link]
# - 追加行到Excel
# - new_count = new_count + 1
# 循环结束,输出日志:“本次新采集 {new_count} 条”
步骤4:滚动加载更多
小红书是瀑布流,滚动到底部自动加载新笔记。
# 设置变量 {no_new_count} = 0(连续无新笔记次数)
# 设置变量 {max_scroll} = 20(最大滚动次数,防止无限)
# 条件循环:{no_new_count} < 3 and {scroll_count} < {max_scroll}
# 1. 滚动页面到底部
# 指令:滚动窗口 → 方向“到底部”
# 2. 固定等待 2 秒(等待加载)
# 3. 调用子流程 C_01_CollectNotes,输出 {new_count}
# 4. 如果 {new_count} == 0
# {no_new_count} = {no_new_count} + 1
# 否则
# {no_new_count} = 0
# 5. {scroll_count} = {scroll_count} + 1
# 循环结束
滚动指令位置:指令面板搜索“滚动窗口”或“滚动到元素”。
如果没有滚动窗口指令,可以用“执行JavaScript”:window.scrollTo(0, document.body.scrollHeight)
五、数据清洗(点赞数转数字)
小红书点赞数格式:“1.2万”、“3456”、“10w”。
用Python正则统一转成整数。
import re
likes_raw = get_var("likes_raw") # 如 "1.2万" 或 "3456" 或 "10w"
match = re.search(r'([\d\.]+)([万w]?)', likes_raw)
if match:
num = float(match.group(1))
unit = match.group(2).lower()
if unit in ['万', 'w']:
likes_num = int(num * 10000)
else:
likes_num = int(num)
else:
likes_num = 0
set_var("likes_num", likes_num)
六、小红书专属避坑指南
坑1:不登录只能看少量笔记
未登录状态下,滚动几次后就不会再加载新内容。
解决:流程开始时先登录,用固定浏览器用户数据目录保持登录态。
坑2:笔记卡片结构不一致
搜索结果页和发现页的卡片结构可能不同。
解决:以搜索结果页为准捕获元素,用contains模糊匹配。
坑3:点赞数位置可能缺失
有些笔记没有显示点赞数(刚发布)。
解决:用“判断元素是否存在”避免报错,缺失则填0。
坑4:滚动太快触发反爬
连续快速滚动会被限制。
解决:每次滚动后固定等待2~3秒,随机浮动。
坑5:链接是相对路径
捕获到的 href 可能是 /discovery/item/xxxx。
解决:用“字符串拼接”加上前缀 https://www.xiaohongshu.com。
七、Excel输出示例
| 标题 | 作者 | 点赞数 | 链接 |
|---|---|---|---|
| 干皮亲妈面霜测评 | 护肤小达人 | 12000 | https://www.xiaohongshu.com/... |
| 早C晚A新手教程 | 成分党Lisa | 3500 | https://www.xiaohongshu.com/... |
表头建议:
手动创建Excel,第一行写入:标题、作者、点赞数、链接。
八、完整流程优化建议
| 优化点 | 方法 |
|---|---|
| 多关键词采集 | 外层套“列表循环”,读取Excel中的关键词列表 |
| 限制采集总数 | 全局变量 g_target_count,达到后跳出滚动循环 |
| 断点续采 | 将已采集链接保存到本地文件,下次运行时加载 |
| 随机等待 | 用“随机数”指令生成1~3秒等待,模拟人工 |
| 异常恢复 | Try-Catch包裹滚动和采集,出错后截图并继续 |
影刀专属操作清单
| 操作 | 精确指令 | 说明 |
|---|---|---|
| 打开小红书 | 打开网页 | URL: https://www.xiaohongshu.com |
| 输入搜索词 | 输入文本 | 用模拟输入 |
| 等待卡片 | 等待元素出现 | 超时10秒 |
| 获取卡片列表 | 获取相似元素列表 | 目标元素为笔记卡片 |
| 滚动到底部 | 滚动窗口 或 执行JavaScript | 触发加载 |
| 追加行 | 追加行 | 写入Excel |
| 去重判断 | 获取列表指定位置的元素 + 如果 | 检查链接是否在全局列表中 |
| 数据清洗 | Python代码 | 处理点赞数格式 |
版本差异:社区版小红书采集建议单次不超过50条,避免触发风控。
创业版可搭配代理IP轮换。
常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 搜索后无笔记 | 页面加载慢或关键词无结果 | 增加等待时间,检查元素路径 |
| 滚动后不加载新内容 | 未登录或触发风控 | 登录后重试,降低滚动频率 |
| 点赞数提取为0 | 格式不匹配(如“10w”中的w小写) | 正则加上 [Ww] |
| 重复采集同一条笔记 | 没有去重逻辑 | 用全局列表记录已采链接 |
| 捕获的元素运行时失效 | class变化 | 用contains模糊匹配 |
| 采集条数比实际少 | 卡片未完全加载 | 滚动后多等几秒再获取列表 |
推荐资源
- 小红书网页版:https://www.xiaohongshu.com
- 影刀模板市场:搜索“小红书笔记采集”
- XPath Helper:校验元素定位
最后一句:小红书采集的关键是“慢”——滚动慢、等待久、加随机延迟。
调通后,每天竞品监控、热点追踪的效率提升10倍。记得遵守平台规则,合理使用。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
