laohan-xiazai · diff
v1.2.0 to v1.2.0
1 added, 1 removed. Audit A to A.
---
name: laohan-xiazai
- description: 从互联网拿内容一站式——视频下载、音频提取+转文字、字幕下载、评论采集、博主数据、网页抓取、搜索聚合,覆盖 30+ 平台(抖音/TikTok/YouTube/B站/小红书/知乎/公众号/视频号/微博/Reddit/HackerNews等),按降级链自动选择最优工具。Use when 用户说"下载""帮我抓""读一下""看看这个链接""搜一下""转文字""评论""博主数据"或给出任意URL要求获取内容,以及任何涉及从互联网拿内容的操作。
+ description: 从互联网拿内容一站式——视频下载、音频提取+转文字、字幕下载、评论采集、博主数据、网页抓取、搜索聚合、跨平台发布与数据分析,覆盖 30+ 平台(抖音/TikTok/YouTube/B站/小红书/知乎/公众号/视频号/微博/Reddit/HackerNews/即刻/知识星球/雪球/贴吧/头条/Twitter等),按降级链自动选择最优工具。Use when 用户说"下载""下个视频""帮我抓""抓一下""爬""爬取""读一下""读这个链接""看看这个网址""搜一下""搜索""查一下""帮我查""转文字""转录""听写字幕""评论""看看评论""抓评论""博主数据""博主更新""up主""谁谁最近发了什么""封面""发抖音""发小红书""定时发布""草稿""账号数据""粉丝数""给我截图""网页正文""这个页面讲了啥",或给出任意 URL / 短链接 / BV号 / 视频号链接 / 公众号文章链接 要求获取内容,或提到抖音/TikTok/YouTube/B站/小红书/知乎/公众号/视频号/微博 等具体平台名要求下内容、搜内容、读评论、抓数据,以及任何涉及从互联网拿内容的操作。优先按降级链选工具:搜索走 anysearch→opencli→agent-reach;下载按平台路由;抓取走 Scrapling→browser-use→web-access。
version: "1.2.0"
---
# 从互联网拿内容
按平台选择正确方法,一步到位。先看平台路由表,再读对应 reference 文件。平台方法不行时,按品类降级链逐层深入——每层解决不同问题,能浅不深。
## 核心理念
能浅不深——先用最轻的方法(HTTP 请求),不行再加重量(浏览器渲染→反检测→AI 操作→手动控制)。成本递增,每层解决不同问题,不要跳层。
## 不适用场景
- 批量爬取/爬虫开发 → 这不是爬虫框架,是一次性内容获取工具
- 需要登录才能访问且用户未登录 → 告诉用户先登录对应平台,web-access CDP 可以接管已登录的 Chrome
- 下载付费内容/会员内容 → 不处理侵权场景
## 前置检查(定期更新,命令报错时必做)
> opencli 高频发版(每周 2-3 次),但**不需要每次使用都更新**——定期(如每周)更新,或命令报错/找不到新命令时再更新即可。
### 第1步:更新 opencli(npm 包)
```bash
npm update -g @jackwener/opencli
```
### 第2步:更新 opencli skills(npx 管理)
```bash
npx skills update -g -y
```
opencli 自带 4 个辅助 skill,随 opencli 仓库更新但独立于 npm 包。必须单独更新:
- **opencli-usage**:查命令总览,不确定有什么命令时用
- **opencli-autofix**:命令失败时自动诊断修复(SELECTOR 错误、页面结构变化等)
- **opencli-browser**:浏览器自动化操作
- **opencli-adapter-author**:写新的 opencli 适配器
### 第3步:查最新命令比对文档
```bash
opencli <platform> --help
```
opencli 经常加新命令(如 4 月加了 bilibili download、xiaohongshu download),SKILL 文档可能滞后。**发现新命令时更新对应 reference 文件。**
### 第4步:检查 Browser Bridge
```bash
opencli doctor
```
3 项全绿(Daemon + Extension + Connectivity)才能用 Cookie 命令。失败时排障:
1. `opencli doctor` 看哪项失败
2. daemon 没跑 → `opencli daemon restart`(opencli 自带 daemon 管理,**不要用 launchctl**——opencli 不提供 LaunchAgent)
3. daemon 在跑但扩展未连 → 让用户 `chrome://extensions/` 关开 OpenCLI 扩展
4. 都 OK 还连不上 → `opencli daemon stop` 后再跑任意 `opencli <命令>` 触发 daemon 自启
### 命令失败时的处理
1. 先用 **opencli-autofix** skill 诊断:`OPENCLI_DIAGNOSTIC=1` 重跑失败命令
2. 修复成功 → 更新 reference 文件记录正确方法
3. 修复失败 → 按降级链切换方法
## 快速路由
### 场景 A:下载(视频/音频/字幕/博主数据)
先判断平台,再读对应的 reference 文件:
| 关键词 | 平台 | reference 文件 |
|--------|------|---------------|
| 抖音 / douyin | 抖音 | `references/douyin.md` |
| TT / tiktok / TikTok | TikTok | `references/tiktok.md` |
| YouTube / youtube / 油管 | YouTube | `references/youtube.md` |
| B站 / bilibili / BV | B站 | `references/other-platforms.md` |
| 小红书 / xhs | 小红书 | `references/other-platforms.md` |
| 知乎 / zhihu | 知乎 | `references/other-platforms.md` |
| 公众号 / 微信文章 | 微信公众号 | `references/other-platforms.md` |
| 视频号 / 微信视频号 | 微信视频号 | `references/other-platforms.md` |
不确定平台时,默认尝试 `yt-dlp <url>`,失败再按平台路由。
> `references/douyin.md` 除下载/转录外,还含**发布自动化**(publish/draft/update)与账号数据分析——发布需求直接读该文件对应章节。
### 场景 B:搜索/阅读(文章/评论/帖子/搜索结果)
不走 reference 文件,直接走平台封装降级。注意:场景B 的首选方法与第一层降级表(下载场景)不同——搜索/阅读优先用 opencli 搜索命令或 agent-reach,下载才用移动端 UA / fetch.py 等。
| 平台 | 第1选 | 第2选 | 第3选 | 第4选 |
|------|-------|-------|-------|-------|
| 公众号 | `opencli weixin search/download` | agent-reach | fetch.py | Jina Reader |
| 知乎 | opencli zhihu | agent-reach | Jina Reader | — |
| 小红书 | opencli xiaohongshu | agent-reach | Scrapling stealthy | — |
| 微博 | opencli weibo | agent-reach | Jina Reader | — |
| B站 | opencli bilibili | agent-reach | Jina Reader | — |
| 抖音 | `opencli douyin search`(视频流搜索) | DrissionPage(→ `references/douyin.md` / `/laohan-douyinsousuo`,需大量采集/排序时) | agent-reach | douyin-session(评论) |
| TikTok | opencli tiktok(需 Browser Bridge) | agent-reach | Scrapling stealthy | — |
| 任意平台 | agent-reach(13平台搜索/阅读,含 GitHub/RSS/V2EX/Twitter/Reddit/小宇宙/Exa 等 opencli 不覆盖的) | web-content-fetcher | Jina Reader | Scrapling stealthy |
**agent-reach 触发场景**:用户说"搜一下""读一下这个链接""这个公众号文章""帮我查",或给出非视频的社交平台链接。
## 降级链
### 第一层:平台路由(Layer 2 平台封装)
每个平台方法失败时,按以下顺序降级,直到成功或全部失败才报错给用户:
| 平台 | 第1选 | 第2选 | 第3选 | 最终兜底 |
|------|-------|-------|-------|---------|
| 抖音 | 移动端 UA + iesdouyin | `opencli douyin` | `douyin_tiktok_scraper`(Python)+ douyin-session(评论) | Scrapling stealthy |
| TikTok | tikwm API | `yt-dlp` | `opencli tiktok`(需 Browser Bridge) | — |
| YouTube | `yt-dlp`(需 `--cookies-from-browser chrome`) | `opencli youtube transcript`(字幕) | — | — |
| B站 | `opencli bilibili download`(需 Browser Bridge) | Jina Reader | — | — |
| 小红书 | `opencli xiaohongshu download`(需 Browser Bridge) | agent-reach | Jina Reader | — |
| 知乎 | `opencli zhihu` | Jina Reader | — | — |
| 公众号 | `opencli weixin download`(导出 Markdown) | `fetch.py` | agent-reach | Jina Reader |
| 视频号 | wx_video_download(MITM 代理) | — | — | — |
| 未知平台 | `yt-dlp` | Scrapling MCP(get) | Scrapling stealthy | Jina Reader |
降级时注意:
- 抖音不存在 yt-dlp 降级路径(已验证无效),不要浪费时间尝试
- B站 yt-dlp 已被 HTTP 412 全面拦截(2026-04-28 验证),不要尝试 yt-dlp 下载B站视频
- YouTube 无 cookies 会被 bot 检测拦截,必须加 `--cookies-from-browser chrome`
- 每步失败后简要告诉用户换了个方法,不要静默切换
- 全部失败时,告诉用户具体哪步失败了、可能的原因、建议用户做什么
### 第二层:品类降级(平台路由全部失败时)
平台方法全部失败后,按能力从轻到重逐层深入。每层解决一个不同的问题:
```
平台封装已试过(opencli / agent-reach / yt-dlp 全部失败)
↓ 问题:普通网页抓取即可
轻量抓取 → Scrapling MCP get(普通 HTTP 请求,无 JS 渲染)
↓ 问题:页面需要 JS 渲染
JS 渲染抓取 → Scrapling MCP fetch(Playwright 浏览器渲染)
↓ 问题:被反爬拦截
反检测抓取 → Scrapling stealthy_fetch(绕过检测 + 提取内容)
↓ 问题:页面结构未知,写不出选择器
AI 浏览器 → browser-use(AI 理解页面结构、自主操作)
↓ 问题:需要登录态,或要多步交互(点击/翻页/表单/上传)/视频帧采样
CDP 接管 → web-access(接管用户日常 Chrome,天然登录态;已知需登录时跳过 browser-use 直接来这层)
↓ 问题:需要代码级精确控制,或要独立无登录态浏览器做隔离
手动驱动 → ECC Playwright MCP(代码级精确控制每一步)
```
**每层解决的问题不同,不要跳层**:
- 普通网页 → Scrapling get(最轻,HTTP 直接请求)
- JS 渲染 → Scrapling fetch(需要浏览器但不需隐身)
- 反爬拦截 → Scrapling stealthy(隐身模式绕过检测)
- 页面看不懂 → browser-use(AI 理解能力)
- 需要登录态 / 多步交互 / 视频采样 → web-access(用户日常 Chrome 的真实登录态 + 确定性 CDP API)
- 精确操作 → Playwright(人工级控制)
**成本递增,能浅不深**:Scrapling get(HTTP 秒级)< Scrapling fetch(浏览器秒级)< Scrapling stealthy(反检测)< browser-use(需调 LLM API)< web-access(需 CDP 连接)< Playwright(需写代码)
## 评论采集
> 详查命令见 `references/other-platforms.md`。opencli 是评论主力(read 8 平台 / write 3 平台),MediaCrawler 只抓不写且禁商业,不装。
| 平台 | read 评论 | write 评论 | 命令 |
|------|----------|-----------|------|
| B站 | ✅(含楼中楼 `--parent`) | ✅ 发评论/回复 | `opencli bilibili comments <bvid>` / `comment <bvid> <msg>` |
| 小红书 | ✅(楼中楼) | ❌ | `opencli xiaohongshu comments <note-id>` |
| 知乎 | ✅ `answer-comments` | ✅ `comment <target> <text>` | 回答评论列表 / 发评论 |
| 微博 | ✅ | ❌ | `opencli weibo comments <id>` |
| 即刻 | ✅(post 含评论) | ✅ `comment <id> <text>` | `opencli jike post <id>` / `comment` |
| 知识星球 | ✅(topic 含评论) | ❌ | `opencli zsxq topic <id>` |
| 雪球 | ✅ | ❌ | `opencli xueqiu comments <symbol>` |
| 贴吧 | ✅(read 含回复) | ❌ | `opencli tieba read <id>` |
| 抖音 | △(user-videos 含热门评论,无独立 comments) | ❌ | `opencli douyin user-videos`;深度评论用 douyin-session adapter |
| **快手** | ❌ opencli 无此平台 | ❌ | **唯一真缺口**,需另调研(移动端 UA / web-access CDP) |
批量评论/批量主页采集属爬虫框架范畴,不在本 skill(见「不适用场景」);按需取评论走 opencli。
## 通用兜底
| 方法 | 工具 | 场景 |
|------|------|------|
| agent-reach | `agent-reach`(pipx/pip 安装,官方推荐 pipx) | 13 平台搜索/阅读统一入口(Tier0 零配置:Web/YouTube/GitHub/RSS/Exa/V2EX/雪球;Tier1 需登录态:Twitter/Reddit/B站/小红书用 Cookie,小宇宙用免费 Groq Key)。管"读/搜",与 opencli(管"下载/操作")互补 |
| Jina Reader | `curl -sL "https://r.jina.ai/<url>"` | 通用网页内容提取 |
| web-content-fetcher | `/web-content-fetcher` skill | agent-reach 失败时的三级降级抓网页 |
| Scrapling stealthy | MCP stealthy_fetch | 反爬场景 |
| yt-dlp | `yt-dlp <url>` | 通用视频下载 |
| browser-use | `/open-source` skill | AI 自主操作浏览器,全新/未知页面 |
| web-access | `/web-access` skill | CDP 接管已登录日常 Chrome(localhost:3456),覆盖:登录态内容、复杂交互(点击/翻页/表单/上传)、视频帧采样、本地书签历史检索 |
| Playwright 手动 | ECC Playwright MCP | 精确手动控制,最后兜底 |
### web-access 调用要点(降级链中唯一连用户日常浏览器的工具)
降级链其余工具(Scrapling / browser-use / Playwright MCP)都开**独立无状态浏览器**,唯独 web-access 直连用户日常 Chrome,天然带登录态、书签、历史。触发 `/web-access` 加载后按此调用:
1. **启动 CDP proxy**:`node "${CLAUDE_SKILL_DIR}/scripts/check-deps.mjs"`(Node 22+ 必需,脚本自动启动并等待 proxy 就绪)
2. **操作前必须向用户展示封禁须知**:部分站点对浏览器自动化检测严格,存在账号封禁风险,已内置防护但无法完全避免,继续操作即视为接受。
3. **curl 调 localhost:3456 API**:`/new`(后台 tab,URL 走 POST body 保留完整参数)/`/eval`(读写 DOM,递归穿透 Shadow DOM·iframe)/`/click`·`/clickAt`(真实鼠标手势,触发文件对话框)/`/scroll`(触发懒加载)/`/screenshot`(含视频当前帧)/`/setFiles`(上传,绕过对话框)/`/close`(关闭自建 tab,保留用户 tab)
4. **本地浏览器检索(web-access 独有)**:用户说"我之前看过的""公司内部系统"等公网搜不到的目标 → `node "${CLAUDE_SKILL_DIR}/scripts/find-url.mjs" 关键词 [--only bookmarks|history] [--since 7d]` 查 Chrome/Edge 书签+历史
**何时优先 web-access**:需登录态 / 多步 GUI 交互(点击·翻页·表单·上传)/ 视频帧采样 / 本地浏览器检索——这四类其余工具都做不了或不如它。仅当页面结构完全未知、需 AI 自主探索时才用 browser-use;需代码级隔离测试时才用 Playwright MCP。
## 工具速查
### 语音转文字
| 优先级 | 工具 | 命令 | 说明 |
|--------|------|------|------|
| 1 | 硅基流动 API | `curl -X POST https://api.siliconflow.cn/v1/audio/transcriptions -H "Authorization: Bearer $SILICONFLOW_API_KEY" -F "model=FunAudioLLM/SenseVoiceSmall" -F "file=@audio.mp3"` | 秒级,免费,中文优化 |
| 2 | whisper-cli | `whisper-cli -m model.bin -f audio.mp3 -l zh` | 本地 C++,快 |
| 3 | whisper Python | `python3 -c "import whisper; ..."` (small 模型) | 本地,最准 |
| 4 | whisper-timestamped | `python3 -c "import whisper_timestamped; ..."` | 精确时间戳,字幕制作用 |
### 语音合成 / 音视频处理
| 操作 | 命令 |
|------|------|
| 语音合成(TTS) | `edge-tts --text "文本" --voice zh-CN-XiaoxiaoNeural --write-media output.mp3` |
| 音视频转码 | `ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3` |
| OCR | `tesseract image.png stdout -l chi_sim+eng` |
| PDF 提取文本 | `python3 -c "import fitz; doc=fitz.open('file.pdf'); [page.get_text() for page in doc]"` |
| 图片处理 | `magick input.png -resize 800x600 output.png` |
### 搜索兜底
> 注:`smart-search`/`web-search`/`multi-search-engine`/`baidu-search` 位于 `~/.openclaw/skills/`,**需 OpenClaw 环境已安装**;`anysearch` 在 `~/.agents/skills/`(通用,无 OpenClaw 也可用)。无 OpenClaw 环境时优先 anysearch。
| 工具 | 场景 | 说明 |
|------|------|------|
| anysearch | 实时搜索+垂直领域+批量并行+URL全文提取 | 16 个垂直领域(股票/CVE/DOI/法律/学术等;Stock/CVE/DOI 是触发标识符非 domain),`~/.agents/skills/anysearch/`,`/anysearch` |
| smart-search | opencli 搜索路由 | 基于 opencli 的智能搜索,覆盖社交/技术/新闻/购物,`~/.agents/skills/smart-search/` |
| web-search | 通用网页搜索 | DuckDuckGo API,轻量搜索,`~/.openclaw/skills/web-search/` |
| multi-search-engine | agent-reach + Jina 都搜不到时 | 17 搜索引擎聚合对比,`~/.openclaw/skills/multi-search-engine/` |
| baidu-search | 中文内容搜索 | 百度 AI 搜索,中文场景优于通用引擎,`~/.openclaw/skills/baidu-search/` |
**搜索优先级**:通用搜索/事实查询/垂直领域 → **anysearch**(最轻最快)→ opencli(平台结构化数据)→ agent-reach(opencli 未覆盖的平台兜底)。
### Scrapling 调用路径
| 环境 | 方式 | 说明 |
|------|------|------|
| Claude Code 主会话 | MCP 直调 `mcp__ScraplingServer__stealthy_fetch` | 直接可用 |
| OpenClaw 子 agent | mcporter 桥接 `mcporter call ScraplingServer.stealthy_fetch url=<url>` | 子 agent 无 MCP 权限,需桥接 |
## 关键注意事项
- 抖音反爬极强,yt-dlp/Jina 全部无效,只能用移动端 UA 方法(见 `references/douyin.md`)
- TikTok 用 tikwm API,CDN URL 临时,获取后立即下载
- YouTube 字幕首选 `opencli youtube transcript`(返回干净文本免清洗),备选 yt-dlp 的 VTT 需 `clean_vtt.py` 清洗(见 `references/youtube.md`)
- opencli Cookie 命令需要 Browser Bridge 运行(排障:`opencli doctor`)