小红书笔记内容提取器
从小红书分享链接中自动提取笔记核心信息:笔记 ID、标题、正文内容、标签。
原理: 小红书带 xsec_token 的分享链接会返回完整 HTML 页面,其中 id="detail-desc" 的 div 包含笔记的全部文字内容。直接 HTTP GET 即可获取。
适用场景
- 用户分享了小红书链接(含 xsec_token 的分享链接),需要快速获取笔记文字内容
- 批量处理多个笔记链接,整理成结构化数据
- 配合审核工具使用,提取笔记内容进行审核
使用方式
单条提取
python3 scripts/extract_xhs_note.py "https://www.xiaohongshu.com/explore/6a7441bd000000002500048d?xsec_token=xxx&xsec_source=app_share"
# 指定输出格式
python3 scripts/extract_xhs_note.py "<url>" --format text
批量提取(推荐)
# 将链接写入文件(每行一个),同时产出终端汇总 + Excel 文件
python3 scripts/extract_xhs_note.py links.txt --batch --summary --format xlsx -o 结果.xlsx
输出格式
| 格式 | 参数 | 说明 |
|------|------|------|
| XLSX | --format xlsx | Excel 文件,含"提取结果"和"汇总统计"两个 Sheet |
| JSON | --format json(默认) | 完整结构化数据 |
| Text | --format text | 人类可读摘要 |
| CSV | --format csv | Tab 分隔,可粘贴到 Excel |
其他参数
| 参数 | 说明 |
|------|------|
| --summary | 在终端打印 Total 汇总(成功/失败列表、失败链接及原因) |
| --output / -o | 指定输出文件路径 |
提取字段
| 字段 | 说明 |
|------|------|
| note_id | 笔记唯一标识(24位十六进制) |
| title | 笔记标题(detail-desc 中第一个非标签、有意义的行) |
| content | 笔记正文(标题之后、标签之前的内容) |
| tags | 话题标签列表(自动去重保序) |
| url | 原始链接 |
链接格式要求
必须包含 xsec_token 参数的分享链接(从小红书 APP 分享 → 复制链接获得):
https://www.xiaohongshu.com/explore/{note_id}?xsec_token=xxx&xsec_source=app_share
https://www.xiaohongshu.com/discovery/item/{note_id}?xsec_token=xxx&xsec_source=pc_share
http://xhslink.cn/o/XXXXX (短链接,自动解析)
提取原理
HTTP GET → HTML 页面 → 正则提取 id="detail-desc" div → 清洗 HTML 标签 →
├── 标题:第一个非 #开头、≥5字的有意义行
├── 正文:标题之后、#标签之前的全部内容
└── 标签:正则匹配 #xxx 并去重
产物说明
执行 --batch --summary --format xlsx 会产生两个产物:
- 终端汇总:Total 统计(总计/成功/失败),列出所有成功笔记的标题+标签,以及失败链接的具体 URL 和原因
- Excel 文件:包含两个 Sheet
- "提取结果" — 所有笔记的序号、状态、笔记ID、标题、正文、标签、原始链接、错误信息
- "汇总统计" — 总计/成功/失败/成功率 + 失败链接详情
注意事项
- 基础提取仅依赖 Python 标准库 +
curl(macOS 自带),无需安装任何依赖 - Excel 导出(
--format xlsx)需要openpyxl:pip install openpyxl - 链接必须包含有效的
xsec_token,否则页面不会渲染 detail-desc xsec_token有时效性,过期后需重新从 APP 分享获取新链接- 短链接(xhslink.cn)会自动跟随重定向解析
- 请求间隔默认 0.5 秒,避免触发限流
故障排除
| 问题 | 原因 | 解决方案 | |------|------|----------| | "未找到 detail-desc" | xsec_token 过期或无效 | 从 APP 重新分享获取新链接 | | 标题为空或为标签 | 笔记以 #标签开头 | 脚本已处理,取第一个有效行 | | 短链接解析失败 | 网络或链接问题 | 手动访问短链接复制完整 URL |
Scan to join WeChat group