Skip to main content

xhs-crawler

type: routine 小红书内容提取与深度分析。任务路由:OpenCLI(采样/feed/search/热帖首选);XHS-Downloader(单笔记深度报告,免登录库直调子进程);legacy CDP(评论/OCR补齐);Browser-Harness(UI/DOM诊断fallback)。 支持链接提取、关键词搜索、创作者主页爬取。提取后生成 7 章节结构化知识资产报告。 Triggers: 小红书, xhs, rednote, xiaohongshu, 获取小红书, 解析小红书, extract xhs, analyze xhs

跳到安装

来源信息

仓库
Loveacup/jz-skills
最近来源活动
2026年7月3日 05:50
检测到的 SKILL.md 语言
中文
星标
1
分支
1

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
65 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
xhs-crawler
description
type: routine 小红书内容提取与深度分析。任务路由:OpenCLI(采样/feed/search/热帖首选);XHS-Downloader(单笔记深度报告,免登录库直调子进程);legacy CDP(评论/OCR补齐);Browser-Harness(UI/DOM诊断fallback)。 支持链接提取、关键词搜索、创作者主页爬取。提取后生成 7 章节结构化知识资产报告。 Triggers: 小红书, xhs, rednote, xiaohongshu, 获取小红书, 解析小红书, extract xhs, analyze xhs
metadata
{"openclaw":{"emoji":"📕","requires":{"bins":"[Truncated]","anyBins":"[Truncated]","env":"[Truncated]"}}}
# 小红书内容提取器 v6 小红书(XiaoHongShu/RedNote)内容提取与趋势采样技能。后端按任务类型路由: - **OpenCLI** 是采样 / feed / 热帖估算 / 趋势 / 关键词搜索的首选路径,读取已登录 Chrome 会话并返回结构化列表。 - **XHS-Downloader** 仍是单篇笔记深度提取与 7 章节报告的首选路径,负责元信息、正文、标签、互动数据、图片 URL 和报告输入契约(第三方开源工具,免登录提取,以**库调用 + 子进程**形式集成,非 HTTP API、非 MCP)。 - **legacy CDP** 仍用于深度报告中必须补齐的评论与轮播图 OCR(需 Chrome CDP + 登录态)。 - **Browser-Harness** 只用于 OpenCLI adapter 覆盖不到的 UI/DOM/debug 缺口;结果必须标注 partial/debug evidence,不能冒充完整提取。 提取后由 agent 自身 LLM 能力按 `references/xhs-report-prompt.md` 模板生成知识资产报告。 > **架构**:skill 胶水层跑在 Hermes 默认 `python3`(3.9);XHS-Downloader 因要求 ≥3.12 且依赖重,被隔离进自己的 uv venv,经子进程(stdin=url / stdout=JSON)调用。详见 `claude.md`。 ## 任务路由 1. **采样 / 热帖 / 趋势 / feed / search → OpenCLI** - `opencli xiaohongshu feed/search` 返回 `{id,title,type,author,likes,url}`。 - 输出口径必须标注:feed 是个人推荐流采样;search 是关键词局部热度;多关键词聚类也不是官方全站热榜。 2. **单篇笔记深度提取 / 7 章节报告 → XHS-Downloader** - 保持 `scripts/xhs_backend.py` 与 `cookie=""` 空字符串约束。 - 评论/OCR 不足时标注,不杜撰。 3. **深度报告补评论 / OCR → legacy CDP** - 仅在需要评论或轮播图 OCR 时启用。 4. **UI/DOM/debug 缺口 → Browser-Harness** - 先 `browser-harness --doctor`,再检查页面/截图/DOM/网络。 - 只产出诊断证据或 partial 数据;能沉淀成稳定流程时再回到 OpenCLI adapter。 ## P0 约束(严格遵守) ### 强制输出检查清单 每份报告必须包含以下 7 个章节,缺一不可: - [ ] 0. 元信息 (Meta) - AI 标题、一句话价值、作者、标签、互动数据 - [ ] 1. 逻辑流 (The Logic Chain) - 表层逻辑 + 底层逻辑 - [ ] 2. 评论深度分析 (Comments Intelligence) - 6 类情绪标注 + 高质量讨论 - [ ] 3. 核心洞察 (Key Insights) - 至少 2 个正向洞察 + 1 个反直觉点 - [ ] 4. 内容深度拆解 (Deep Dive) - 根据内容类型灵活组织 - [ ] 5. 高光时刻 (Highlights & Quotes) - 金句原文 + 上下文 - [ ] 6. 知识图谱与行动 (Knowledge Graph & Action) - 概念关联 + 行动清单 + 批判审视 ### 数据获取 Fallback 策略 **采样 / search 降级链:** 1. **OpenCLI adapter**:`feed` / `search` with `--site-session persistent`。 2. **OpenCLI browser diagnostics**:`opencli doctor`、`opencli browser <session> ...` 仅当 adapter 报错需要 bridge/DOM/network 证据时使用。 3. **Browser-Harness**:仅当 OpenCLI browser 无法暴露所需 UI/DOM 状态或 agent 需要可视化 CDP 检查时使用。 4. **Stop 或返回 partial evidence**。不要默默切换到无关的通用爬虫。 **单篇深度提取降级链:** 1. **XHS-Downloader** `xhs_backend.py`(首选)— `python3 scripts/xhs_backend.py <链接>`(或 `from xhs_backend import fetch_note`),免 Cookie 即可获取标题/描述/标签/互动数据/图片 URL。**关键:胶水层永远显式传 `cookie=""` 空字符串触发免登录路径,传 null 或不传会失败(已固化在 `build_command` 里)。** 2. **ok 且报告不需评论/OCR**:生成报告,标准 missing-data 标注。 3. **ok 但需要评论/OCR**:legacy CDP fallback。 4. **XHS-Downloader 失败**:优先带 tokenized 分享链/短链,再尝试 legacy CDP(如有意义)。 5. **IP 风控 300012**:**立即止损**;停止所有尝试,向用户汇报已穷尽方案,提供三个选项:(A) 提供 Cookie 换 API 模式 (B) 换代理 IP (C) 手动复制内容。禁止继续轮换其他方案,每多试一次都是浪费 token。 6. **invalid_url**:ask for valid XHS URL。 7. **legacy CDP 因登录/CDP 失败**:标注不可用或询问用户恢复登录/CDP。 8. **Browser-Harness 仅用于诊断页面状态**,不能声称完整提取。 **通用浏览器/爬虫工具定位:** - 不要用 Crawl4AI、普通 web_extract、通用 browser-agent 替代本 skill 作为小红书主力;这些工具通常缺少小红书专用登录态、评论加载、轮播图 OCR、报告结构和数据完整性检查。 - 可用 agent-browser/Playwright MCP/Browser-Harness 作为**诊断和兜底**:检查页面是否登录、分享链接是否跳转、DOM 是否变化、评论/轮播图是否能手动展开、截图是否可 OCR。 - 通用爬虫只适合尝试公开落地页的 meta/少量文本,结果必须标注为 partial,不能声称完整提取。 ### 数据引用规范 **✅ 正确示例:** > "评论原文内容" —— 用户名(👍 123,情绪:赞同) **❌ 错误示例:** > 有网友评论说大概意思是...(禁止改写或概括) **⚠️ 数据不足时标注:** - `[数据不足]` - 正常情况但数据量少于预期 - `[获取失败]` - 技术错误导致数据缺失 - `[需要登录]` - 权限限制导致无法获取 - `[不支持]` - 功能限制(如私密笔记) --- ## 📋 完整执行检查清单(必须遵守) 每次提取必须按以下步骤执行,完成后逐项勾选: ### Step 1: 前置检查 - [ ] **浏览器状态检查**: Chrome CDP 端口 19222 可连接 - [ ] **登录态验证**: Chrome 中已登录小红书账号 - [ ] **环境变量确认**: `CHROME_CDP_URL` 配置正确 ### Step 2: 数据提取(核心) - [ ] **基础数据提取**: 标题、作者、正文内容 - [ ] **正文完整性检查**: 正文长度 > 50 字符,否则标记警告 - [ ] **标签提取**: 所有 #标签 已提取 - [ ] **互动数据**: 点赞、收藏、评论数 - [ ] **评论区加载**: 滚动加载直到无新增(最多15次) - [ ] **评论去重**: 检查并去除重复评论 - [ ] **评论完整性检查**: 提取数量应接近页面显示的评论数 ### Step 3: 轮播图 OCR(关键) - [ ] **轮播图数量确认**: 检测笔记总页数(通常 10-12 张) - [ ] **逐张截图**: 所有轮播图页面已截图 - [ ] **OCR 识别**: 每张截图已完成 OCR - [ ] **OCR 结果合并**: 所有图片文字已合并到报告 - [ ] **截图即时删除**: 每完成一张 OCR,立即删除截图 ### Step 4: 报告生成 - [ ] **7章节检查**: 0-6 章节全部完成 - [ ] **P0约束验证**: 元信息、逻辑流、评论分析、核心洞察齐全 - [ ] **数据引用规范**: 评论使用原文,禁止概括改写 - [ ] **批判性审视**: 包含独特价值和局限盲区分析 ### Step 5: 临时文件清理(强制) - [ ] **截图删除**: 所有 PNG 截图文件已删除 - [ ] **临时目录清理**: `/tmp/xhs_analyzer/` 下临时目录已删除 - [ ] **过程文件清理**: 中间 JSON/TXT 过程文件已清理 - [ ] **保留文件确认**: 仅保留最终报告和完整数据文件 ### Step 6: 最终验证 - [ ] **文件大小检查**: 报告文件大于 5KB(确保内容完整) - [ ] **正文完整性确认**: 正文长度合理(通常 100-5000 字符) - [ ] **评论完整性确认**: 提取评论数与页面显示数量差异 < 50% - [ ] **OCR 内容确认**: 报告中包含轮播图文字内容 - [ ] **保存路径确认**: 文件保存至 `~/Documents/Obsidian/AlexCai/00-Inbox/` - [ ] **用户通知**: 告知用户提取完成和文件位置,报告任何完整性警告 --- ### 隐私与安全红线 **严禁存储或输出:** - 用户 Cookie、Session ID、Token - 个人隐私信息(手机号、地址等) - 小红书内部 API 响应中的敏感字段 **安全实践:** - Cookie 仅存储在 `~/.xhs_cookie`,不输出到日志 - 报告中的用户 ID 使用昵称而非用户 ID - 临时文件定期清理(见执行指南) --- ## 📊 数据完整性验证标准 ### 正文完整性 | 指标 | 标准 | 警告阈值 | |:---|:---|:---| | **长度** | 通常 100-5000 字符 | < 50 字符 | | **内容** | 包含完整句子和段落 | 只有片段或乱码 | | **标签** | 至少包含 1 个 #标签 | 无标签 | **正文提取失败的可能原因:** 1. 页面未完全加载 → 增加等待时间 2. 选择器不匹配 → 使用多选择器备选方案 3. 动态加载内容 → 滚动触发加载 ### 评论完整性 | 指标 | 标准 | 警告阈值 | |:---|:---|:---| | **数量** | 接近页面显示的评论数 | < 显示数量的 50% | | **去重** | 无重复评论 | 发现重复 | | **内容** | 每条评论有用户名和正文 | 大量"匿名"或空内容 | **评论提取不完整的可能原因:** 1. 滚动次数不足 → 增加滚动次数至无新增 2. "查看更多"未点击 → 自动检测并点击展开按钮 3. 登录态失效 → 检查 Chrome 登录状态 ### 完整性自检脚本 ```python # 在提取完成后执行 completeness_check = { "content_length": len(content), "comments_count": len(comments), "expected_comments": expected_count, "content_warning": len(content) < 50, "comments_warning": len(comments) < expected_count * 0.5 } ``` --- ## 前置要求 ### ⭐ 主力前置:bootstrap XHS-Downloader(一次性) ```bash # 幂等:自动 clone 到 .xhs-downloader/ 并用 uv 同步出 Python 3.12 venv(含全部依赖) python3 {baseDir}/scripts/xhs_bootstrap.py # 自检后端是否就绪 python3 {baseDir}/scripts/xhs_bootstrap.py doctor ``` 依赖 `uv`(`brew install uv`)与可用的 Python 3.12(如 `/opt/homebrew/bin/python3.12`)。 clone 落点 `.xhs-downloader/` 已 gitignore,不入库;`git pull` 即可更新上游。 ### legacy 前置(仅 CDP 兜底链路需要) 以下仅在需要评论 / 轮播图 OCR、启用 `scripts/legacy/` CDP 链路时才配置: 1. **xhshow 库已安装**: ```bash cd ~/.hermes/skills/xhs-crawler pip3 install -e . # 验证: python3 -c "from xhshow import Xhshow; print('OK')" ``` **注意**:需要 Python 3.9+。如果 setup.py 要求 3.10+ 但系统只有 3.9, 手动修改 `setup.py` 中的 `python_requires=">=3.9"` 后再安装。 2. **Playwright Chromium 已安装**: ```bash python3 -m playwright install chromium ``` 3. **Chrome CDP 已启动**(链接提取模式必需): **Google Chrome + CDP(推荐):** 1. 在 Chrome 中登录小红书 2. 启动 Chrome 带远程调试端口: ```bash /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=19222 \ --no-first-run \ --no-default-browser-check & ``` 3. 验证:`curl http://127.0.0.1:19222/json/list` **或 Comet 浏览器(备选):** ```bash /Applications/Comet.app/Contents/MacOS/Comet \ --remote-debugging-port=19222 \ --no-first-run \ --no-default-browser-check ``` 验证:`curl http://127.0.0.1:19222/json/list` ### Python 依赖 ```bash pip3 install -r {baseDir}/requirements.txt python3 -m playwright install chromium ``` **xhshow 库安装:** ```bash cd {baseDir} pip3 install -e . ``` ### Cookie(API 模式必需) ```bash python3 {baseDir}/scripts/legacy/cookie_manager.py save 'web_session=xxx;a1=xxx' ``` 从浏览器 DevTools → Application → Cookies 获取 `web_session` 和 `a1` 字段。 ### 环境变量 | 变量 | 用途 | 默认值 | |------|------|--------| | `CHROME_CDP_URL` | CDP 连接地址 | `http://127.0.0.1:19222` | | `QWEN_API_URL` | Qwen3-VL OCR 地址 | `http://<internal IP redacted>:9998/v1/chat/completions` | | `XHS_OUTPUT_DIR` | 报告输出目录 | `~/Documents/Obsidian/AlexCai/00-Inbox` | | `XHS_PROXY` | HTTP 代理(可选) | 无 | ## 使用方法 ### ⭐ 主力方案:XHS-Downloader 库直调(免 Cookie 提取) **适用场景:** 快速获取笔记标题、描述、标签、互动数据、图片 URL。不需要登录态、Chrome CDP、Cookie。 **一次性准备**见上文「主力前置:bootstrap」。准备好后**无需启动任何服务器**,直接调用: **命令行:** ```bash python3 {baseDir}/scripts/xhs_backend.py "<小红书链接>" # 输出报告输入契约 JSON:{status, report_input, message, stop_loss, url} ``` **库调用(推荐,便于 agent 编排):** ```python import sys; sys.path.insert(0, "{baseDir}/scripts") from xhs_backend import fetch_note out = fetch_note("<小红书链接>") # cookie 默认 ""(免登录) if out["status"] == "ok": data = out["report_input"] # 已适配成报告模板输入契约 # data["title"] / ["author"] / ["tags"] / ["content"] / # data["comments"](标注) / ["ocr_content"](标注) / ["stats"] / ["needs_cdp_fallback"] ``` **支持的链接格式(优先用带 `xsec_token` 的分享链 / 短链,免风控):** - `https://www.xiaohongshu.com/explore/<note_id>?xsec_token=...` - `https://www.xiaohongshu.com/discovery/item/<note_id>?xsec_token=...` - `https://xhslink.com/<short_code>`(短链,由后端自动解析) - ⚠️ **裸 `explore/<note_id>`(无 token)易触发风控**——`prepare_url` 会原样保留 token,绝不削成裸 id。 **`fetch_note` 返回 `status` 分类:** | status | 含义 | 处理 | |---|---|---| | `ok` | 成功,`report_input` 为适配后数据 | 进入报告生成 | | `failed` | 后端未提取到数据 | 换带 token 的新链接 / 上 CDP 兜底 | | `ip_risk` | IP 风控(300012),`stop_loss=True` | **立即止损**,按下方 Q7 上报用户 | | `timeout` | runner 子进程超时 | 重试一次,仍失败则上报 | | `invalid_url` | 非小红书链接 | 提示用户检查链接 | | `error` | runner 异常 / 坏 JSON | 跑 `xhs_bootstrap.py doctor` 查后端是否就绪 | **⚠️ 关键陷阱:`cookie` 必须是空字符串** - `cookie=""`(空字符串)= 免登录提取成功 ✅ - `cookie=None` 或不传 = 失败 ❌ - 已固化在 `build_command`:胶水层永远显式传 `""`,无需手动处理。 **局限性(vs CDP 模式)——适配器一律输出标准标注而非杜撰:** - ❌ 不能提取评论 → `[评论数据不足:...评论总数 N 条]` - ❌ 不能提取轮播图 OCR → `[图片OCR不可用:...共 N 张...]` - ❌ 图文正文常嵌在图里、可能不完整 → 正文后标注 `[正文可能不完整...]` - ✅ 元信息/标签/互动数据足够;`report_input["needs_cdp_fallback"]` 为 True 时建议上 CDP 补评论/OCR --- ### OpenCLI:采样 / feed / 热帖 / search(⭐ 首选) **适用场景:** 用户问”小红书今天热门是什么””看热帖””看首页推荐流/某关键词热帖/趋势”。此类任务优先用 OpenCLI 读取小红书 hydrated store,字段稳定、输出结构化,不要直接用通用 DOM 抓取作为主路径。 **前置体检:** ```bash opencli --version opencli doctor opencli list -f json opencli xiaohongshu --help opencli xiaohongshu whoami -f yaml --window foreground --site-session persistent ```
在 GitHub 查看
这个 SKILL.md 很大,SkillsMP 这里只预览前一段内容。 在 GitHub 查看