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
آخر نشاط في المصدر
٣ يوليو ٢٠٢٦ في ٠٥:٥٠
لغة SKILL.md المكتشفة
الصينية
النجوم
١
التفرعات
١

خيارات التثبيت

يُحدَّد 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