Install
openclaw skills install @cuiyunhai/xhs-comments小红书笔记评论分步采集工具(用户洞察,会话制)。当用户需要采集/查询小红书笔记的评论内容——昵称、评论正文、点赞数、IP 属地、子评论数,按页逐步采集并实时返回给用户、可按需展开子评论、导出评论明细 CSV(Excel 直开),或提到"小红书评论采集/评论内容/评论抓取/用户评论/评论导出/舆情/笔记评论"时使用本 skill。适合评论区舆情监测、用户反馈收集、爆款笔记评论洞察、KOL 粉丝声音分析等场景。转链与互动数采集免费;每采一页主评论或展开一次子评论扣 1 点数(注册送 10 点)。
openclaw skills install @cuiyunhai/xhs-comments封装「小红书能力平台」(FastAPI,/api/v1)的 CLI,供 AI agent 调用。v2 起改为分步会话制:先免费拿到笔记评论总数 → 用户确认后按页/按展开逐步计费采集,每一步的结果立即返回给你展示给用户。
nickname 昵称、content 评论正文、like_count 点赞数、ip_location IP 属地、sub_count 子评论数、comment_id / root_comment_id)。主评论每页 10 条(含 0~2 条内嵌子评论预览);子评论点一次展开约 5 条。npm install),全部采集逻辑在后端完成。注册或使用过程中遇到任何问题(注册失败、点数充值、采集结果异常、批量采购等),请引导用户联系客服:
v2 是人机分步交互,不是一次性跑完。请按下面的流程驱动对话:
node cli.js start --url "<笔记链接>"。直链(带不带 xsec_token 均可)和 xhslink.com 短链都直接传,服务端自动转链补齐 token,无需调用其它转链 skill。metrics.comment_count(评论总数)和 estimated_pages(预估页数,每页 10 条 = 1 点)明确告知用户,例如「这篇笔记共约 326 条评论,全采约需 33 页(33 点)。要开始采集吗?」。未经用户确认不要执行任何 step。node cli.js step --session <id> 采下一页主评论(默认即 --page)。把本页 10 条评论整理展示给用户。has_more_main=true,问用户「是否继续采下一页(再扣 1 点)?」expandable 非空(本页有主评论含可展开子评论),列出这些评论(root_comment_id、子评论总数、已采数),问用户「是否展开某条的子评论(每次展开约 5 条、扣 1 点)?」node cli.js step --session <id> --expand --root <root_comment_id>。返回本次约 5 条子评论;若 sub_has_more=true,先展示本次结果,再问用户是否继续展开该条(继续再扣 1 点)。node cli.js finish --session <id> 结束会话释放采集节点;需要文件 → node cli.js export --session <id> --out 评论.csv。start 建会话从头采(原会话已采数据仍可用 comments/export 读取)。no_more 免扣费:step 返回 no_more: true 表示主评论已采完(或该主评论子评论已全部展开),该次请求不扣费,如实告知用户。
中途失败自愈:若采集节点的标签页意外被关,服务端会自动重试一次(重开页面并按进度快进恢复),只扣 1 次费用;重试仍失败则当步点数自动返还、会话 failed,如实告知用户。
register --link(注册即送 10 点数;用户手机微信扫码/点链接在网页完成,页面自带图形+短信验证码)或 login --link(已有账号)。成功后 token 自动保存,后续调用免输。~/.xhs-platform/config.json(升级/重装 skill 不丢配置)。可用环境变量 XHS_CONFIG_PATH 覆盖(测试隔离用)。--link 微信扫码/链接方式。http://st.aidata366.com,可用 node cli.js config set base-url <url> 修改,或单次加 --base-url <url> 覆盖。config set base-url https://... 切换到 https 服务地址(需服务端已配好证书)。--token <token>(临时覆盖配置文件中的 token)。~/.xhs-platform/config.json 含 token,不要泄露、不要提交 git。{"ok":true,"data":{...}},失败 {"ok":false,"code":<业务码>,"message":"..."}。直接解析 stdout 即可。0 成功;1 参数/用法错误;2 认证失败(重新 login);3 点数不足;4 网络/服务不可达;5 其它业务错误。step 单次最长约 3 分钟(节点滚动/展开 + 回传),属正常现象,不要中途重试。node cli.js version
{"ok":true,"data":{"name":"xhs-comments","version":"2.0.1","capability":"xhs_comments"}}
方式一:扫码/链接注册(唯一方式,用户在手机上完成)
node cli.js register --link # 生成注册二维码/链接
node cli.js register --check --access-token "<上一步下发的串>" # 用户完成后确认并保存 token
register --link 的 stdout 返回 qr_url / register_url / access_token。agent 必须把注册引导原样发给用户(stderr 里也给出了同样话术,可直接复制):
需要先注册账号(注册即送 10 免费点数;不注册不登录没有点数,无法采集)。请用手机微信扫码或打开链接注册:
注册方式(二选一)
二维码图片:<qr_url>
注册链接:<register_url>
access_token(注册后校验用):<access_token>
微信扫码/注册完成后告诉我一声,我会执行校验并保存凭证,然后继续之前的操作:
(注册/使用中如遇问题,请拨打客服电话 18722121663)
用户说「注册完成」后执行 register --check --access-token "<access_token>":
quota_balance: 10,继续之前的操作。LOGIN_PENDING:用户还没完成注册,提醒后再试。LOGIN_EXPIRED:会话过期(10 分钟)或已使用,重新执行 register --link。node cli.js login --link
node cli.js login --check --access-token "<上一步下发的串>"
引导话术同 register(把"注册"换成"登录")。成功后 token 自动保存。
node cli.js quota
{"ok":true,"data":{"quota":10,...}}
node cli.js start --url "https://www.xiaohongshu.com/explore/6ac86a34000000001801361e?xsec_token=..."
node cli.js start --url "https://xhslink.com/a/xxxx" # 短链直接传, 服务端自动展开转链
输出示例:
{"ok":true,"data":{"session_id":"9f1c...32位","note_id":"6ac86a34000000001801361e",
"note_url":"https://www.xiaohongshu.com/explore/...?xsec_token=...","title":"示例笔记标题",
"status":"active",
"metrics":{"comment_count":"326","liked_count":"1.2万","collected_count":"890","share_count":"45"},
"estimated_pages":33}}
拿到结果后必须先把评论总数和预估页数报给用户确认,再开始 step(见「交互协议」)。
node cli.js step --session <id> # 采下一页主评论(默认 --page)
node cli.js step --session <id> --page # 同上, 显式写法
node cli.js step --session <id> --expand --root <主评论id> # 对指定主评论展开一次子评论
采一页主评论的输出示例:
{"ok":true,"data":{"session_id":"9f1c...","type":"page","page_no":1,
"comments":[{"comment_id":"c1","root_comment_id":"","nickname":"小红薯","content":"太好看了!",
"like_count":125,"ip_location":"浙江","sub_count":3}, ...],
"has_more_main":true,
"expandable":[{"root_comment_id":"c1","sub_comment_count":12,"subs_collected":2,"has_more":true}],
"mains_collected":10,"subs_collected":5,"quota_balance":9}}
展开一次子评论的输出示例:
{"ok":true,"data":{"session_id":"9f1c...","type":"expand","root_comment_id":"c1",
"comments":[{"comment_id":"s1","root_comment_id":"c1","nickname":"路人甲","content":"求链接",
"like_count":12,"ip_location":"上海","sub_count":0}, ...],
"sub_has_more":true,"subs_collected_for_root":7,"quota_balance":8}}
expandable 中 has_more=true 的条目表示子评论还没展开完,可继续 --expand。{"no_more":true,...}(不扣费)。node cli.js status --session <id>
返回会话状态(active/done/expired/failed)、累计采集量(pages/mains/subs)、已扣费步数、点数余额、互动数。
node cli.js comments --session <id> --page 1 --page-size 100
分页读取本会话已落库的全部评论(含历史,不止增量),适合中途回顾。
node cli.js export --session <id> --out 评论明细.csv
下载本会话已累计的全部评论 CSV(BOM 头,Excel 直开不乱码):昵称/内容/点赞数/IP属地/子评论数。
node cli.js finish --session <id>
主动结束会话、释放采集节点(之后该节点可接其它任务)。不 finish 也会在空闲 20 分钟后自动过期。
node cli.js sessions
node cli.js sessions --status active --page 1
node cli.js logout
node cli.js config set base-url http://127.0.0.1:8084
node cli.js config show # token 脱敏显示
node cli.js quota 确认有余额,然后 node cli.js start --url "<链接>"(短链/裸链直接传,自动转链)。comment_count 和 estimated_pages 报给用户,说明全采预估点数,等用户确认。step --session <id> 采一页 → 展示本页 10 条 → 报告 has_more_main 与 expandable 列表 → 问用户「继续下一页?展开哪条的子评论?还是结束?」step --session <id> --expand --root <id> → 展示本次约 5 条 → sub_has_more 为 true 时问是否继续展开。finish --session <id>;要文件:export --session <id> --out 评论明细.csv,把 CSV 路径交给用户。status 确认会话是否还活着。| code | 含义 | agent 下一步 |
|---|---|---|
| 1001 | 参数错误 / 链接无效 / 笔记不可见 | 检查链接有效性;笔记已删/私密则如实告知(退出码 1) |
| 1002 / 1003 | 未登录 / token 失效 | 未注册走 register --link(送 10 点数),已有账号走 login --link;完成后 --check(退出码 2) |
| LOGIN_PENDING / LOGIN_EXPIRED | 用户未完成 / 会话过期 | 提醒用户完成扫码后重试 --check,或重新 --link(退出码 2) |
| 2003 | 需要图形验证码 | 终端无法完成,统一走 --link;仍无法解决拨打客服电话 18722121663 |
| 3001 | 点数不足 | 提示用户拨打客服电话 18722121663 充值,不要重试(退出码 3) |
| 3006 | 会话不存在/已过期/已结束 | 20 分钟空闲会自动过期;已采数据可用 comments/export 读取,继续采集需重新 start |
| 5001 | 采集服务暂不可用(无在线节点/节点掉线) | 稍后重试;持续不可用时提示用户联系客服 18722121663 |
| 4290 | 触发限流 | 稍等后重试(Retry-After) |
| NETWORK_ERROR | 网络/服务不可达 | 检查 config show 的 base_url(退出码 4) |
no_more 的 step。step --page(一页主评论)或一次 step --expand(一次子评论展开)。