Web Reader
智能网页阅读器:抓取文章(图文)→ 归档到指定目录 → 分析/摘要/衍生。
工作流程
Phase 1: 下载原文(优先执行)
当用户提供 URL 并要求下载/保存/抓取/分析时,先下载原文。
Step 1: 确定归档路径
检查用户是否配置了归档目录。读取 ~/.claude/web-reader.json:
{
"archive_dir": "/Volumes/Keybase (m4)/private/biggerbear/文档/微信摘录",
"categories": ["AI漫剧短剧", "AI工具与技术", "OpenClaw", "开发技术", "商业与产品", "飞书文档"]
}
如果配置文件不存在,使用 ~/Documents/docs/ 作为默认归档目录。
Step 2: 抓取文章
python3 {SKILL_DIR}/fetcher.py "URL" -o "ARCHIVE_DIR" --category "CATEGORY"
对于需要 JavaScript 渲染的页面(返回 "JavaScript enabled" 错误),升级为浏览器模式:
# 先尝试 scrapling fetch(浏览器)
scrapling extract fetch "URL" /tmp/article.md --network-idle
# 如果仍失败,用 camoufox
python3 {SKILL_DIR}/fetcher.py "URL" -o "ARCHIVE_DIR" --method camoufox --category "CATEGORY"
Step 3: 处理微信图片
对于微信公众号文章(mp.weixin.qq.com),fetcher.py 自动处理 data-src 图片。
如果自动处理失败(图片为空 ![]() 占位符),手动处理:
- 用 scrapling 获取 HTML:
scrapling extract get "URL" /tmp/wx.html -s "#js_content"
- 从 HTML 中提取
data-src="https://mmbiz.qpic.cn..." URL
- 下载图片到
ARCHIVE_DIR/CATEGORY/SLUG/ 目录
- 替换 markdown 中的空占位符为本地路径
Step 4: 自动分类
根据文章内容判断分类。参考分类关键词:
- AI漫剧短剧: 漫剧, 短剧, 动漫, seedance, AI视频创作
- AI工具与技术: AI工具, 大模型, scrapling, agent, API, 技术方案
- OpenClaw: openclaw, claude code, agent team
- 开发技术: flutter, 编程, 开发, 逆向, IDE, 部署
- 商业与产品: 产品分析, 商业模式, 市场, 付费, 创业
- 飞书文档: feishu.cn 域名
如果不确定分类,询问用户选择或创建新分类。
Step 5: 确认结果
输出归档信息:
Phase 2: 后续探索(用户触发)
文章下载完成后,等待用户指令:
| 指令 |
动作 |
| 分析 |
阅读文章全文,提取核心观点、论据、方法论,给出结构化分析 |
| 摘要 |
生成 3-5 句话的精炼摘要,保留关键数据和结论 |
| 总结 |
按章节列出要点,适合快速回顾 |
| 衍生 |
基于文章内容,提出可以进一步探索的方向、相关话题、实践建议 |
| 提炼 |
提取可直接复用的方法、工具、配置、代码片段 |
| 对比 |
与之前下载的其他文章进行对比分析(需指定对比目标) |
| 洗稿 |
基于原文重写,保留核心信息但完全改写表述(配合 /wxpub 使用) |
执行分析时,直接读取归档的 markdown 文件,不需要重新抓取。
智能路由
| 平台 |
方法 |
说明 |
| mp.weixin.qq.com |
scrapling |
提取 data-src 图片,处理 SVG 占位符 |
| *.feishu.cn |
虚拟滚动 |
滚动采集内容块,浏览器内下载图片 |
| zhuanlan.zhihu.com |
scrapling |
.Post-RichText 选择器 |
| www.zhihu.com |
scrapling |
.RichContent 选择器 |
| www.toutiao.com |
scrapling |
处理 toutiaoimg base64 占位符 |
| www.xiaohongshu.com |
camoufox |
反爬需要隐身浏览器 |
| www.weibo.com |
camoufox |
反爬需要隐身浏览器 |
| bilibili.com / b23.tv |
yt-dlp |
视频下载 |
| youtube.com / youtu.be |
yt-dlp |
视频下载 |
| douyin.com |
yt-dlp |
视频下载 |
| 其他 URL |
scrapling |
通用抓取,三级降级策略 |
安装依赖
按需安装:
| 依赖 |
用途 |
安装 |
| scrapling |
文章抓取 |
pip install scrapling |
| yt-dlp |
视频下载 |
pip install yt-dlp |
| camoufox |
反检测浏览器 |
pip install camoufox && python3 -m camoufox fetch |
| html2text |
HTML 转 Markdown |
pip install html2text |
CLI 参考
python3 {SKILL_DIR}/fetcher.py [URL] [OPTIONS]
参数:
url 要抓取的 URL
选项:
-o, --output DIR 输出目录(默认: 当前目录)
-q, --quality N 视频质量(默认: 1080)
--method METHOD 强制方法: scrapling, camoufox, ytdlp, feishu
--selector CSS 强制 CSS 选择器
--urls-file FILE URL 列表文件(每行一个,# 注释)
--audio-only 仅提取音频
--no-images 跳过图片下载
--cookies-browser NAME 浏览器 cookies(如 chrome, firefox)
--category NAME 归档子目录名
--json-output JSON 格式输出(程序化调用)
配置
创建 ~/.claude/web-reader.json 配置归档目录:
{
"archive_dir": "~/Documents/docs/articles",
"categories": ["技术", "产品", "行业"]
}
平台特殊处理
微信公众号
- 图片使用
data-src 属性 + mmbiz.qpic.cn
- 可见
<img> 是 SVG 懒加载占位符
- 图片下载需要
Referer: https://mp.weixin.qq.com/ 请求头
飞书文档
- 虚拟滚动:滚过的内容会从 DOM 移除
- 注入 JS 采集器在滚动过程中捕获
[data-block-id] 内容块
- 图片 401:必须在浏览器上下文内用
fetch(url, {credentials: 'include'}) 下载
Bilibili
- 短链 (b23.tv) 自动解析
- 大会员内容用
--cookies-browser chrome
故障排除
| 问题 |
解决方案 |
| 页面需要 JavaScript |
用 --method camoufox 或先 scrapling extract fetch |
| 微信图片为空 |
手动从 HTML 提取 data-src URL |
| 飞书返回登录页 |
文档可能需要认证 |
| B站 403 |
用 --cookies-browser chrome |
| 内容太短 |
尝试 --method camoufox |
1---2name: web-reader3description: 智能网页阅读器 - 抓取文章/下载视频并归档,支持分析、摘要、衍生。Triggers: '下载这篇文章', '抓取文章', '保存文章', 'fetch URL', '分析这篇文章', '摘要', '总结文章', '下载视频', '抓取微信文章', '抓取飞书文档', '把这个链接保存下来', '下载B站视频', 'download article', 'analyze article', 'summarize'.4license: MIT5---67# Web Reader89智能网页阅读器:抓取文章(图文)→ 归档到指定目录 → 分析/摘要/衍生。1011## 工作流程1213### Phase 1: 下载原文(优先执行)1415当用户提供 URL 并要求下载/保存/抓取/分析时,**先下载原文**。1617**Step 1: 确定归档路径**1819检查用户是否配置了归档目录。读取 `~/.claude/web-reader.json`:2021```json22{23 "archive_dir": "/Volumes/Keybase (m4)/private/biggerbear/文档/微信摘录",24 "categories": ["AI漫剧短剧", "AI工具与技术", "OpenClaw", "开发技术", "商业与产品", "飞书文档"]25}26```2728如果配置文件不存在,使用 `~/Documents/docs/` 作为默认归档目录。2930**Step 2: 抓取文章**3132```bash33python3 {SKILL_DIR}/fetcher.py "URL" -o "ARCHIVE_DIR" --category "CATEGORY"34```3536对于需要 JavaScript 渲染的页面(返回 "JavaScript enabled" 错误),升级为浏览器模式:3738```bash39# 先尝试 scrapling fetch(浏览器)40scrapling extract fetch "URL" /tmp/article.md --network-idle4142# 如果仍失败,用 camoufox43python3 {SKILL_DIR}/fetcher.py "URL" -o "ARCHIVE_DIR" --method camoufox --category "CATEGORY"44```4546**Step 3: 处理微信图片**4748对于微信公众号文章(mp.weixin.qq.com),fetcher.py 自动处理 `data-src` 图片。49如果自动处理失败(图片为空 `![]()` 占位符),手动处理:50511. 用 scrapling 获取 HTML:`scrapling extract get "URL" /tmp/wx.html -s "#js_content"`522. 从 HTML 中提取 `data-src="https://mmbiz.qpic.cn..."` URL533. 下载图片到 `ARCHIVE_DIR/CATEGORY/SLUG/` 目录544. 替换 markdown 中的空占位符为本地路径5556**Step 4: 自动分类**5758根据文章内容判断分类。参考分类关键词:59- **AI漫剧短剧**: 漫剧, 短剧, 动漫, seedance, AI视频创作60- **AI工具与技术**: AI工具, 大模型, scrapling, agent, API, 技术方案61- **OpenClaw**: openclaw, claude code, agent team62- **开发技术**: flutter, 编程, 开发, 逆向, IDE, 部署63- **商业与产品**: 产品分析, 商业模式, 市场, 付费, 创业64- **飞书文档**: feishu.cn 域名6566如果不确定分类,**询问用户**选择或创建新分类。6768**Step 5: 确认结果**6970输出归档信息:71- 文章标题72- 保存路径73- 图片数量74- 分类7576### Phase 2: 后续探索(用户触发)7778文章下载完成后,等待用户指令:7980| 指令 | 动作 |81|------|------|82| **分析** | 阅读文章全文,提取核心观点、论据、方法论,给出结构化分析 |83| **摘要** | 生成 3-5 句话的精炼摘要,保留关键数据和结论 |84| **总结** | 按章节列出要点,适合快速回顾 |85| **衍生** | 基于文章内容,提出可以进一步探索的方向、相关话题、实践建议 |86| **提炼** | 提取可直接复用的方法、工具、配置、代码片段 |87| **对比** | 与之前下载的其他文章进行对比分析(需指定对比目标) |88| **洗稿** | 基于原文重写,保留核心信息但完全改写表述(配合 /wxpub 使用) |8990执行分析时,直接读取归档的 markdown 文件,不需要重新抓取。9192## 智能路由9394| 平台 | 方法 | 说明 |95|------|------|------|96| mp.weixin.qq.com | scrapling | 提取 `data-src` 图片,处理 SVG 占位符 |97| *.feishu.cn | 虚拟滚动 | 滚动采集内容块,浏览器内下载图片 |98| zhuanlan.zhihu.com | scrapling | `.Post-RichText` 选择器 |99| www.zhihu.com | scrapling | `.RichContent` 选择器 |100| www.toutiao.com | scrapling | 处理 toutiaoimg base64 占位符 |101| www.xiaohongshu.com | camoufox | 反爬需要隐身浏览器 |102| www.weibo.com | camoufox | 反爬需要隐身浏览器 |103| bilibili.com / b23.tv | yt-dlp | 视频下载 |104| youtube.com / youtu.be | yt-dlp | 视频下载 |105| douyin.com | yt-dlp | 视频下载 |106| 其他 URL | scrapling | 通用抓取,三级降级策略 |107108## 安装依赖109110按需安装:111112| 依赖 | 用途 | 安装 |113|------|------|------|114| scrapling | 文章抓取 | `pip install scrapling` |115| yt-dlp | 视频下载 | `pip install yt-dlp` |116| camoufox | 反检测浏览器 | `pip install camoufox && python3 -m camoufox fetch` |117| html2text | HTML 转 Markdown | `pip install html2text` |118119## CLI 参考120121```122python3 {SKILL_DIR}/fetcher.py [URL] [OPTIONS]123124参数:125 url 要抓取的 URL126127选项:128 -o, --output DIR 输出目录(默认: 当前目录)129 -q, --quality N 视频质量(默认: 1080)130 --method METHOD 强制方法: scrapling, camoufox, ytdlp, feishu131 --selector CSS 强制 CSS 选择器132 --urls-file FILE URL 列表文件(每行一个,# 注释)133 --audio-only 仅提取音频134 --no-images 跳过图片下载135 --cookies-browser NAME 浏览器 cookies(如 chrome, firefox)136 --category NAME 归档子目录名137 --json-output JSON 格式输出(程序化调用)138```139140## 配置141142创建 `~/.claude/web-reader.json` 配置归档目录:143144```json145{146 "archive_dir": "~/Documents/docs/articles",147 "categories": ["技术", "产品", "行业"]148}149```150151## 平台特殊处理152153### 微信公众号154- 图片使用 `data-src` 属性 + `mmbiz.qpic.cn`155- 可见 `<img>` 是 SVG 懒加载占位符156- 图片下载需要 `Referer: https://mp.weixin.qq.com/` 请求头157158### 飞书文档159- 虚拟滚动:滚过的内容会从 DOM 移除160- 注入 JS 采集器在滚动过程中捕获 `[data-block-id]` 内容块161- 图片 401:必须在浏览器上下文内用 `fetch(url, {credentials: 'include'})` 下载162163### Bilibili164- 短链 (b23.tv) 自动解析165- 大会员内容用 `--cookies-browser chrome`166167## 故障排除168169| 问题 | 解决方案 |170|------|----------|171| 页面需要 JavaScript | 用 `--method camoufox` 或先 `scrapling extract fetch` |172| 微信图片为空 | 手动从 HTML 提取 `data-src` URL |173| 飞书返回登录页 | 文档可能需要认证 |174| B站 403 | 用 `--cookies-browser chrome` |175| 内容太短 | 尝试 `--method camoufox` |