小红书对标内容采集
Overview
把链接文档里的小红书笔记批量采集入库:一条笔记一个文件夹,完整保存原文信息与图片;视频笔记转写脚本;重复链接跳过;入库后在链接文档回写标记。
链接文档、编号、去重、图片落位、字段表、回写标记这些机械环节全部由 scripts/ 下的脚本负责——不用把链接文档读进上下文,也不用自己数编号。
安装方法
- 先问使用者用的是什么 AI 工具,选项按这个顺序列:1. WorkBuddy 2. Claude Code 3. Codex 4. 其他(用户直接说工具名),回答记作 X
- 只安装给 X,不安装或链接其他任何工具:
-
X 是 WorkBuddy:把本技能下载后放进
~/.workbuddy/skills/(WorkBuddy 的技能目录;skills CLI 不支持 WorkBuddy,由你直接放置) -
X 是其他工具:
npx -y --registry=https://registry.npmmirror.com skills add https://modelscope.cn/skills/sunny31221/xiaohongshu-collect-buheliwa -a X -y(不带
-a会安装给本机所有检测到的工具,禁止;--registry为 npmmirror 镜像,保证国内不翻墙也能拉到 CLI) -
X 不在上述范围时,按该工具自身的技能机制安装,装完确认 X 能识别本技能即可
-
- 装完后询问是否现在使用本技能
When to Use
- 用户要求把
规律研究/对标内容采集/对标采集内容链接.md里的链接批量入库 - 用户说「采集对标内容」「小红书入库」「保存小红书素材」
- 用户提供一条或多条小红书链接要求完整采集(信息+图片+评论+脚本)
- 社媒助手复制的笔记 JSON(直接发对话,或贴在链接文档里)→ JSON 模式
- 用户说「提取图片文字」「图片OCR」「小红书图片文案」「提取笔记图片内容」「提取文案」,或给一条小红书链接要求提取完整内容(标题/正文/标签/图片文字/互动数据/评论)→ 单条模式
When NOT to Use
- 只要笔记正文文字、不下载图片不做 OCR → 用
opencli xiaohongshu note直接取 - 视频号、公众号等其他平台内容(本 skill 仅处理小红书)
依赖与安装
开工前先确认工具都在:
command -v opencli >/dev/null || echo "opencli 未安装"
command -v python3 >/dev/null || echo "python3 未安装"
python3 -c "import rapidocr_onnxruntime" 2>/dev/null || echo "rapidocr-onnxruntime 未安装(图片笔记认字要用)"
转写引擎不用在这里查——scripts/transcribe.py 自己看系统选,缺了它会告诉使用者装哪个。
缺了就把对应命令给用户,装不装由用户定,不要替他安装:
| 工具 | 用途 | 安装 |
|------|------|------|
| opencli | 抓笔记/评论/图片 | npm install -g @jackwener/opencli |
| python3 | 跑本技能的脚本 | macOS 自带,或 brew install python@3.12;Windows 用 python.org 安装包 |
| rapidocr-onnxruntime | 图片认字(OCR)。图片笔记的文字走它,图片不进模型 | pip install rapidocr-onnxruntime(约 16MB,macOS / Windows / Linux 通用) |
| 转写引擎(视频笔记才需要) | 见下 | 见下 |
scripts/ 下的脚本(含认字用的 ocr.py、压图用的 shrink.py)随技能一起装好,不用另外下载;要自己装的只有 opencli 和上面这些 python 库。
转写引擎按系统二选一,scripts/transcribe.py 会自动挑,不用手工判断:
| 系统 | 引擎 | 安装 |
|------|------|------|
| macOS + Apple 芯片 | mlx-whisper | pip3 install mlx-whisper |
| 其他(Windows / Linux / Intel Mac) | faster-whisper | pip install faster-whisper "av<17" |
av 必须锁 <17:PyAV 从 17 起删掉了 metadata_errors 参数,而 faster-whisper 1.2.1 还在传它,装最新版会一跑就报 TypeError(2026-10-03 实测)。
国内网络慢时换镜像:npm 用 npm config set registry https://registry.npmmirror.com;pip 加 -i https://pypi.tuna.tsinghua.edu.cn/simple。
装的时候认准同一个 python:本机可能装了不止一个 python(比如 python3 是 3.14,而 pip3 指向 3.12),装到别的 python 里脚本会认不到。脚本查不到依赖时会把它自己用的 python 路径打出来,照着那个路径装即可。
未安装时的处理:
- opencli 缺失 → 本技能无法抓取,告知用户需要先装
- rapidocr 缺失 → 图片笔记先问用户装不装;不装就退回读图,读之前先压缩(见「工作流 · 第二步」第 4 条)
- 转写引擎缺失 → 视频笔记只存信息与封面,跳过转写并在汇报里说明
- python3 缺失 → 无法建夹与落媒体,停在这里等用户装
登录态:opencli xiaohongshu whoami 确认已登录;未登录时提示用户执行 opencli xiaohongshu login 打开浏览器完成认证。
目录与命名规范
保存根目录:AI第二大脑/规律研究/对标内容采集/小红书/,一条笔记一个文件夹,命名 编号_笔记标题_笔记ID(编号三位补零,脚本按已有最大编号 +1 算)。
同一个数字永远指同一种文件,按笔记类型取其中几个,不是每个都有:
001_标题_笔记ID/
├── 01_原始素材/
│ ├── 01-封面图/01.jpg ← 笔记第一张图的副本(视频笔记就是它的封面)
│ └── 02-正文图片/01.jpg… ← 图文笔记才有;首图也在这里,封面是它的额外副本
├── 02_内容信息.md ← 字段表 + 正文 + 标签 + 评论 + 图片引用
├── 03_图片文案原文.md ← 图片笔记才有(图片里大量文字时 OCR)
├── 04_文案结构化梳理.md ← 图文型与视频型都有
└── 05_视频脚本.md ← 视频笔记才有
封面单独留一份副本,是因为以后要单独拿封面做「小红书封面规律提炼」——即使和正文第一张图重复也复制一份。
视频笔记的原片不进素材文件夹:下载到临时目录 → 转写 → 删掉,留下的是转写稿和封面。
标题里的 / \ : * ? " < > | 等非法字符由脚本做必要替换,不改标题原文。图片没下载成功时留空夹,不伪造封面。
少花调用次数
有些链路按请求次数计费(第三方兼容接口的每日额度多是这样),不按 token。一次模型回复里发多个工具调用,只算 1 次请求;串行一次发一个,就一次一个数。同一个任务排得好坏,能差三倍次数。
- 能串的串成一条命令:
python3 a.py && python3 b.py,中间结果用$(...)接住。互不依赖的命令别分成两次 Bash。 - 抓取三路一轮发完:
note、comments、download互不依赖,放在同一条回复里三个 Bash 一起发。 - 落文件一轮发完:
02_内容信息.md、03_图片文案原文.md、04_文案结构化梳理.md三个 Write 放在同一条回复里。 - 脚本输出要过滤:
check_library.py的输出配head/grep再看。全量输出进上下文既拖速度,也容易把关键信息淹掉。
按这几条排,单条笔记入库的请求次数从二十来次压到 5 次上下:
| 轮次 | 做什么 | 工具调用 | |------|--------|---------| | 1 | 依赖检查 + 清单 + 追加链接 | 1 条 Bash | | 2 | 抓取 note / comments / download | 3 条 Bash 并行 | | 3 | 建夹 + OCR + 回写标记 | 1 条 Bash | | 4 | 落三个 md 文件 | 3 个 Write 并行 | | 5 | 入库检查 + 汇报 | 1 条 Bash |
批量采集时,每条笔记之间仍要 sleep 5,不要并发多条笔记;同一条笔记的三路抓取照旧并行。
工作流
第一步:预处理
-
跑清单脚本,拿到这次要采什么:
python3 "<本技能目录>/scripts/link_doc.py" list返回一行 JSON:
待采集(ID、来源是链接还是 JSON、完整链接)、已入库、主页链接、其他平台、其他行。- 链接必须原样用脚本给的
完整链接,?xsec_token=及之后的参数一个都不能截,截了 opencli 会报ARGUMENT错 主页链接与其他平台不归本技能处理,原样留到汇报里列出其他行是脚本认不出的行(重复行、解析失败的 JSON),汇报时说明
- 链接必须原样用脚本给的
-
确认工具与登录态(见「依赖与安装」)。
第二步:逐条入库
对清单里的每一条:
单条模式——用户只给一条链接或一个笔记 ID 时走同一套流程,两处差别:
- 先把它追加进链接文档(不要手工编辑那个文件,走脚本;已经有这条会自动跳过):
python3 "<本技能目录>/scripts/link_doc.py" add "<完整链接>",JSON 原文则用add --json '<JSON>' - 不用跑第一步的
list,清单就是刚追加的这条
之后每一步都同下面。
-
抓取——三路可以并行;条与条之间至少间隔 5 秒(
sleep 5)再起下一条,遇风控/频率限制/验证码错误把间隔提到 10-15 秒再重试这一条。不要并发多条笔记。opencli xiaohongshu note "<完整链接>" -f json→ 标题、作者、正文、标签、互动数据opencli xiaohongshu comments "<完整链接>" -f json→ 评论opencli xiaohongshu download "<完整链接>" --output <临时目录> -f json→ 图片 / 视频
-
建文件夹 + 落媒体——跑脚本,编号、去重、建骨架、字段表、图片按序落位都由它做:
python3 "<本技能目录>/scripts/create_note_folder.py" \ --id <笔记ID> --title "<笔记标题>" --type 图文|视频 \ --author "<作者>" --published <YYYY-MM-DD> --url "<完整链接>" \ --likes <N> --collects <N> --comments <N> \ --media-dir <下载临时目录>返回的 JSON 里有文件夹绝对路径、编号、
已存在、以及落了哪些图。- 类型由下载结果判定:含视频 →
--type 视频,否则--type 图文 - 发布时间接口不返回时传空,脚本写「接口未提供」,不编造
已存在: true说明这条之前采过,脚本不会重复建也不覆盖——跳过第 3、4 步,直接做第 5 步- 脚本只按文件名顺序落名;页面顺序与文件名顺序不一致时(文章型笔记常见图片内页码角标「01/13」),在 OCR 那一步按页码重排图片文件与 03 的顺序
- 类型由下载结果判定:含视频 →
-
补内容——脚本已经把字段表填好了,只补它写不了的部分,用 Edit 改这几节,不要整份重写:
- 正文、标签、评论列表:原文照抄,不概括、不改写、不分析
- 「内容图片」一节按
01_原始素材/02-正文图片/的顺序嵌入本地图片引用 - 视频笔记补「视频脚本」引用,图片笔记补「图片文案」引用
-
按类型出衍生文件:
-
视频笔记:先看时长,超过 20 分钟先问用户要不要转,然后跑转写脚本——它自己看系统挑引擎(macOS + Apple 芯片走 mlx-whisper,Windows / Linux 走 faster-whisper),不用手工判断:
python3 "<本技能目录>/scripts/transcribe.py" <视频文件> --out-dir <临时目录> --model medium转写稿出来后删掉原片,再出
05_视频脚本.md与04_文案结构化梳理.md(格式分别见assets/视频脚本模板.md、assets/文案结构化梳理模板.md)。 转写稿要按上下文语义修正明显误转词(同音字、专有名词),只修错别字,不润色、不改口语表达,拿不准的原样保留并在文末「修正说明」里列出。 脚本报「两个转写引擎都没装」时,把它的提示原样转给用户,装不装由用户定;用户不装就只存信息与封面,跳过转写。 -
图片笔记:封面带「全文N字」标记、或图片 ≥3 张、或正文为空 → 跑 OCR 脚本,出
03_图片文案原文.md与04_文案结构化梳理.md:python3 "<本技能目录>/scripts/ocr.py" --dir "<笔记文件夹>/01_原始素材/02-正文图片"脚本在本地认字,图片不进模型——不吃图片 token,也不受「图片被当成文字喂给模型」那类链路故障影响。输出已按坐标还原排版(表格按行、栏位用
|分界)。-
拿脚本输出做底稿,交给模型按语义修一遍再落 03:脚本是按坐标拼的,仍会有断行、错字(同音字、形近字)、栏位内多个片段的先后顺序问题。把认出来的字给模型,按上下文语义修正,只修明显错误,不润色、不重写、不增删内容——和视频转写的处理方式一致
-
图片内见页码角标(如「1/4」)时,先按页码重排图片文件与本文顺序
-
先只跑第一张,确认出得来字、内容对得上,再跑其余;第一张就不对就停下来查,别整批跑完才发现
-
不要把原图交给模型读。原图进了提示词就是 base64 文本,一张约十万 token(2026-10-07 实测:7 张图把单轮输入从 6.9 万顶到 46.8 万),此后每轮请求还带着它重发。要图里的字,就走上面的 OCR
-
OCR 没装或跑不通时,先给用户安装命令;确实装不上、又必须看图(比如要照着版式写一篇),先用
scripts/shrink.py压小再读:python3 "<本技能目录>/scripts/shrink.py" --dir "<笔记文件夹>/01_原始素材/02-正文图片" --out .tmp/shrink-<笔记ID> --max-edge 800压完一张图降到原来的三分之一左右(实测 192KB → 67KB)。一次最多读封面加一张内页,不要整批读。压缩件放临时目录,用完删掉,不写进素材夹
-
读图拿到乱码、一大段编码数据、或与图无关的内容 → 立刻停手,不要接着读第二张,向用户报告链路异常
-
-
-
回写标记——跑脚本,不要手工编辑链接文档:
python3 "<本技能目录>/scripts/link_doc.py" mark <笔记ID>脚本只往那一行行尾追加「(已入库 ✓ 日期)」,其余行逐字不动,改前先留一份
.bak。 JSON 条目会顺带把原文剪切归档到03_知识库/04_采集JSON存档/,原行换成一行记录——原文先落盘、确认写好才替换,不会只删不存。
第三步:入库后检查
全部处理完后,按 references/入库检查清单.md 执行检查,更新 规律研究/对标内容采集/_入库检查报告.md。
先跑 scripts/check_library.py 拿客观事实(条数、字段齐不齐、图片在不在、![[xx.jpg]] 指得对不对),只让模型做脚本做不了的那一项——判断疑似重复,再写报告。不要为了数条数去逐个读文件:全库读一遍是几十万 token,脚本跑一遍是两千。
该清单扫的是全库口径,报告是全平台共用的。
第四步:汇报
- 新增入库条数(列出文件夹位置)
- 跳过重复条数、失败条数及原因
- 图片下载成功 / 失败数量
- 正文为空的条数(哪些已用 OCR 补充)
- 视频转录条数及脚本位置
- 主页链接列表、其他平台链接(未处理)
- 当前
对标内容采集/已入库总数
JSON 模式(社媒助手复制粘贴)
社媒助手(Chrome 插件)复制的笔记 JSON,跟普通链接一样处理——两种输入形式的产出完全一致。JSON 可能直接发在对话框里,也可能已经贴在链接文档里。
若 JSON 在对话里:先把它追加进 对标采集内容链接.md(一行一条),之后全走脚本,不手工解析。
处理步骤:
link_doc.py list认出这条,再link_doc.py show <笔记ID>取字段——脚本会把 JSON 展开成结构化字段,原文不用进上下文:标题、类型、正文、博主昵称、发布时间、点赞/收藏/评论/分享量、图片链接、视频链接与时长。- 建文件夹与后续步骤同「工作流 · 第二步」,两处差别:链接来自
show的结果而不是链接文档;图片用 curl 按图片数组的顺序下载(命令见references/commands.md),下到同一个临时目录后照样交给--media-dir,由脚本改名、复制封面。下载失败的图片记录原链接,不跳过。 - JSON 不含评论内容,评论一节写「未采集(插件复制数据未含评论内容)」;有分享量就补一行「分享量」。
- 回写标记用
link_doc.py mark <笔记ID>——脚本会同时完成「行尾加标记」与「JSON 原文剪切归档」两件事。 - 归档 CSV 由编排器批量采完后统一跑,本技能不跑。
Common Mistakes
- 把
user/profile主页链接当笔记处理 → 主页不是单条内容,脚本会单独列出来,照原样汇报即可 - 文章型笔记不 OCR → 小红书大量「文字长图」笔记,正文只是引流文案,内容全在图片里;图片 ≥3 张或封面含「全文N字」必须跑
scripts/ocr.py,且原文与结构化梳理两份都要出 - 图片顺序错 → 先按 download 返回的原始顺序排,再核对图片内页码角标,有页码就必须按页码重排
- 把原图直接交给模型读 → 图片会以 base64 文本进提示词,一张原图约十万 token,此后每轮请求都带着重发。要文字走
scripts/ocr.py;必须看版式就先跑scripts/shrink.py压小,一次最多读两张(2026-10-07 实测:7 张图把单轮输入从 6.9 万顶到 46.8 万,峰值 88 万) - 读图读到乱码还接着读 → 拿到的是编码数据而不是图里的字,说明这条链路坏了;立刻停手报告,不要一张接一张读下去(2026-10-03 实发:一张图把上下文从 58k 顶到 249k)
- 一条一条串行发命令 → 一次回复里的多个工具调用只算 1 次请求,串行发就是一次一条。做法见「少花调用次数」
- 转录视频前未确认音频时长 → 长视频(>20 分钟)先问用户要不要转
- 转写错别字不修正,或把原文提炼成要点 → 必须按上下文语义保守修正误转词;结构化分段用小标题 + 原文,最大化还原,不提炼、不压缩、不概括
- 从链接里截掉
?xsec_token=参数 → opencli ≥1.8 要求签名 URL,截了直接报 ARGUMENT 错 - 批量采集无间隔 → 条与条之间必须
sleep 5,遇风控提到 10-15 秒,不要并发多条笔记 - 手工编辑链接文档 → 一律走
link_doc.py mark,脚本只追加、只动自己那一行,改前留备份
不做什么
- 不识别链接属于哪个平台——那是编排器的事
- 不建目录——平台目录与环境由初始化技能建好(笔记自己的文件夹由建夹脚本建)
- 不提规律、不沉淀卡片——规律走
pattern-extractor-buheliwa,知识卡片走thought-card-buheliwa - 不跑归档 CSV——「已入库 ✓」标记由本技能写,归档由编排器批量采完后统一跑
Resources
- 清单与回写脚本:scripts/link_doc.py
- 建夹与落媒体脚本:scripts/create_note_folder.py
- 图片认字脚本:scripts/ocr.py
- 图片压缩脚本(读图前压小用):scripts/shrink.py
- 音视频转写脚本(按系统自动选引擎):scripts/transcribe.py
- 入库检查脚本(客观事实部分):scripts/check_library.py
- 命令速查:references/commands.md
- 入库检查清单:references/入库检查清单.md
- 内容信息模板:assets/内容信息模板.md
- 图片文案原文模板:assets/图片文案原文模板.md
- 文案结构化梳理模板:assets/文案结构化梳理模板.md
- 视频脚本模板:assets/视频脚本模板.md
微信扫一扫