小红书笔记 → Markdown
概述
把一条小红书笔记变成一份结构化的 Markdown 文件:笔记元信息 → 正文逐字 → 核心内容(含可复制的提示词/清单/步骤)→ 实用附录 → 采集说明。
核心难点不在整理,而在抓取:小红书对机房 / 数据中心 IP 有强风控,本机浏览器通道基本必然失败。本 skill 的价值在于给出已被实测验证过的可绕过通道,以及图片正文抓取失败时的诚实降级路径。
输入只需一个东西:小红书链接。
触发条件
| 用户说法 | 是否触发 |
| --- | --- |
| 「抓取这条小红书的内容,整理成 md」 | ✅ |
| 「把这篇笔记存一下」+ 小红书链接 | ✅ |
| 直接粘贴小红书分享文案(含 xhslink.cn/o/xxx) | ✅ |
| 「上传到 ima / 存进知识库」+ 小红书链接 | ✅ |
| 只问小红书怎么用、不涉及具体笔记 | ❌ |
工作流
Step 0 — 确认输出位置(默认即可,不要多问)
- 默认输出到当前工作区根目录,文件名:
<笔记标题>_小红书笔记_<YYYYMMDD>.md - 文件名中的标题需去掉
\/:*?"<>|等非法字符 - 用户没提 ima 就不要主动上传;用户说"存进 ima / 知识库"才走 Step 6
Step 1 — 解析链接,拿到 note_id
运行解析脚本(脚本位于本 skill 目录下,用绝对路径调用):
python3 ~/.workbuddy/skills/xiaohongshu-note-to-md/scripts/resolve_xhs_link.py "<用户给的链接>"
脚本输出三行:NOTE_ID / XSEC_TOKEN / CANONICAL_URL(加 --json 输出 JSON)。
原理:对短链发一次 GET(脚本内用 urllib 跟随 302),从跳转目标 URL 里取登录页的 redirectPath 参数,其中含 .../discovery/item/<note_id> 与 xsec_token;必要时做多轮 URL 解码(该参数常被二次编码)。这是取 note_id 最省事、最稳的方法,不要尝试直接抓短链页面正文(会 302 到登录页)。
若用户给的就是 www.xiaohongshu.com/explore/<id> 形式,直接从 URL 里取 id 和 xsec_token,脚本同样适用。
Step 2 — 抓正文(唯一可靠通道:WebFetch)
直接用 WebFetch 打开,不要在本地起浏览器。两个入口都要打一遍,取信息更全的那个:
| 优先级 | 入口 | 实测表现 |
| --- | --- | --- |
| ① 首选 | 用户给的原始短链(https://xhslink.cn/o/xxx) | 返回正文 + 标签 + 评论区全文(含 AI「点点」摘要),信息最全 |
| ② 备用 | 标准 URL(Step 1 的 CANONICAL_URL) | 有时只返回标题 + 正文,评论区缺失 |
WebFetch 的 prompt 固定用这个模板:
提取这篇小红书笔记的全部可见内容,逐字返回,不要总结:
1) 标题
2) 正文全文(含标签 #xxx)
3) 作者昵称
4) 发布时间
5) 图片/视频的数量与说明
6) 评论区前排内容(尤其是作者本人的回复、以及 AI 助手「点点」的摘要评论)
有明显遗漏的地方标注出来。
若首选入口没返回评论区,再打备用入口;反之亦然。两个入口结果不一致时以内容更全的为准。
为什么必须用 WebFetch:本机(bash / curl / agent-browser)的出口是机房 IP,小红书会直接返回 website-login/error?error_code=300012,IP存在风险。WebFetch 的抓取后端出口可用。
Step 3 — 判断内容形态
拿到正文后先判断:
| 情况 | 处理 | | --- | --- | | 正文本身够长(有多段实质内容) | 直接整理正文,进 Step 5 | | 正文很短(如"自存一下""分享一下"+ 一堆标签),核心内容明显在图片里 | 必须进 Step 4 尽力取图 |
判断依据:正文里出现"展开全文"但内容仍然很短、或正文只是一句感叹/自述,就是典型的"内容全在图里"。
Step 4 — 图片正文(尽力而为,允许失败)
按顺序尝试,任何一步超时就跳过,不要死磕:
- 确认图片数量与主题:WebFetch 追问一句,例如「这篇笔记共有几张图?每张图大致讲什么?如果评论区有图片,也描述一下」。这通常能从 AI 摘要评论里拿到每张图的要点。
- Microlink 渲染整页截图(可选,成功率低):
拿curl -G "https://api.microlink.io/" \ --data-urlencode "url=<笔记URL>" \ --data-urlencode "screenshot=true" --data-urlencode "meta=false" \ --data-urlencode "waitUntil=networkidle2"data.screenshot.url下载后用 Read 看图。注意:未登录态下小红书图集图片不加载,截图里图片区域通常是空白占位——除非截图里确实看清了图,否则不要浪费时间反复重试。 - 不要尝试:
agent-browser/ 本地 Chromium(必被 300012 拦截)、r.jina.ai(登录墙)、tenapi / oioweb / xingzhige 等第三方解析接口(已实测不可用)、Wayback(新笔记无存档)、Microlinkclick=关弹窗(弹窗关了图片依然不加载)。
取不到图时怎么办(重要):
- 用评论区官方 AI 助手「点点」的摘要评论作为交叉参考——它通常逐条概括了图片里的要点,是目前能拿到的最完整的二手信息。
- 在 md 里明确写出「依据笔记图片内容与官方摘要整理的可直接使用版本」,并注明与原图可能存在的表述差异。
- 绝对不要把整理版伪装成原文逐字。用户要靠它做决策,误导的代价远大于不完整。
- 最后主动告诉用户:提供原图(截图/原图文件)可替换为逐字转写版。
Step 5 — 输出 Markdown
按 references/md-template.md 的模板写。结构固定为:
- 笔记信息表(平台/标题/作者/链接/短链/笔记 ID/发布时间/内容形态/采集时间)
- 笔记原文正文(逐字,逐字部分用引用块)
- 核心内容(用户真正要的东西:提示词、清单、步骤、方法论)
- 建议使用顺序 / 落地流程(把内容变成可执行动作)
- 注意事项或常见坑
- 附录(评论区摘要原文等)
- 采集说明(技术备注:哪些是逐字、哪些是整理版、为什么)
写完用 present_files 展示给用户。
Step 6 — 上传 ima(可选,用户明确要求时才做)
加载并遵循 ima-local-file-upload skill 完成三段式上传(create_media → COS 签名 PUT → add_knowledge),最后等 20~30s 用 get_knowledge_list 校验 media_state=2 / parse_progress=100。
用户没有指定知识库时,必须问清楚传到哪个库,不要默认。
硬规则
- 正文逐字部分必须真的是逐字,不得改写、缩写、润色。
- 整理版必须显式标注,且说明"角色设定/步骤/输出要求来自原笔记,措辞为便于直接使用而补全"。
- 不要把标题、发布时间从 URL 或猜测中编造出来;拿不到就留空并注明。
- 时间敏感内容要标注采集时间(笔记可能被作者编辑或删除)。
- 输出语言默认中文(用户用中文提问时)。
资源
scripts/resolve_xhs_link.py— 从任意小红书链接解析出note_id/xsec_token/ 标准 URLreferences/fetch-playbook.md— 各抓取通道的实测结论与失败路径清单(省得下次重走弯路)references/md-template.md— 输出 Markdown 的固定模板
微信扫一扫