📦 Web Article to Obsidian — 网页文章转 Obsidian
v1.0.0网页文章一体化抓取存入Obsidian知识库。集成Playwright/Tavily/Firecrawl/Browser四种提取引擎,支持微信公众号/富途牛牛/雪球/通用网页,自动行业分类、导航清理、双层存储。统一替代wechat-article-extractor、wechat-mp-reader、articl...
运行时依赖
安装命令
点击复制技能文档
网页文章一体化抓取 → Obsidian
集成三套提取方案,按优先级自动回退,一键完成「URL → 提取 → 清洗 → 行业分类 → Obsidian存储」全流程。
触发条件 用户发送文章链接(URL) 提及"存obsidian"、"保存文章"、"抓取文章"、"放入知识库"等 提及"微信公众号"文章读取需求 支持的平台 平台 识别关键词 内容选择器 特殊处理 微信公众号 mp.weixin.qq.com #js_content URL追加?scene=1 富途牛牛 news.futunn.com .inner.origin_content URL清理跟踪参数;分离作者/时间;行情组件移除 雪球 xueqiu.com .article__bd__detAIl 登录墙绕过 东方财富 eastmoney.com .txt信息s / .newsContent 广告清理 通用网页 其他 article / mAIn / body 智能正文识别 提取引擎优先级链(核心创新)
按成功率和速度排序,自动回退:
方法1: Hermes browser_navigate (最快,内置工具,无需外部依赖) ↓ 失败 方法2: Playwright headless (反检测能力强,支持JS渲染) ↓ 失败 方法3: Tavily API (住宅IP池,绕过反爬,需API Key) ↓ 失败 方法4: Firecrawl 命令行工具 (浏览器渲染引擎,需已安装) ↓ 失败 方法5: 网页_提取 (纯HTTP提取,最后兜底)
方法详解 方法1: Hermes browser_navigate(首选) 使用 Hermes 内置 browser_navigate → browser_snapshot 工具链 速度最快,零外部依赖 适合:微信、富途、雪球等JS渲染页面 调用方式:直接使用 Hermes 工具,无需Python脚本 方法2: Playwright headless 完整浏览器环境,反自动化检测绕过 支持自定义等待策略和选择器 适合:方法1被反爬拦截时 方法3: Tavily API 住宅IP池,模拟真实用户 无需浏览器,API直取 需要 TAVILY_API_KEY 环境变量 适合:微信验证码拦截、IP被封时 方法4: Firecrawl 命令行工具 云端浏览器渲染+JS执行 firecrawl scrape "?scene=1" --only-mAIn-content -o <输出>.md 需要 firecrawl 已安装并配置 方法5: 网页_提取 Hermes 内置 网页_提取 工具 纯HTTP抓取,不支持JS渲染 仅适合静态页面,最后兜底 微信文章URL规范化规则
铁律:URL必须带 ?scene=1 参数,否则触发验证码。
原始URL 修正后 规则 .../s/abc123 .../s/abc123?scene=1 无参数→追加?scene=1 .../s/abc123?chksm=xxx .../s/abc123?chksm=xxx&scene=1 已有?→追加&scene=1 .../s/abc123?scene=1 不变 已包含→跳过 智能行业分类
基于标题+前1000字符关键词匹配,自动归类到Obsidian对应目录:
行业 识别关键词 Obsidian路径 AI芯片 AI芯片、GPU、GPGPU、寒武纪、壁仞、海光、摩尔线程、半导体 sources/AI芯片/ AI大模型 大模型、LLM、GPT、Claude、通义、文心、DeepSeek、AGI sources/AI大模型/ 新能源 新能源、宁德时代、动力电池、锂电池、光伏、风电、储能、比亚迪 sources/新能源/ 消费 消费、白酒、茅台、啤酒、食品饮料、调味品、零售 sources/消费/ 医药 医药、创新药、医疗器械、CXO、生物科技、疫苗、中药 sources/医药/ 金融 金融、银行、保险、证券、券商、投行、资管 sources/金融/ 互联网 互联网、电商、腾讯、阿里、字节、美团、拼多多、SaaS sources/互联网/ 军工 军工、国防、航天、航空、导弹、雷达 sources/军工/ 汽车 汽车、整车、乘用车、车企、吉利、长城 sources/汽车/ 能源 能源、电力、煤炭、石油、天然气、华能、三峡 sources/能源/ 原材料 化工、钢铁、有色、水泥、万华、MDI sources/原材料/ 地产 地产、房地产、保利、万科、碧桂园 sources/地产/ 宏观经济 宏观、GDP、CPI、PMI、央行、货币政策、财政政策 sources/宏观经济/ Obsidian 双层存储结构 ~/Documents/Obsidian Vault/llm-wiki/ ├── raw/ # 原始文本归档(不丢失任何内容) │ ├── wechat/{行业}/ # 微信文章原文 │ ├── futu/{行业}/ # 富途文章原文 │ ├── xueqiu/{行业}/ # 雪球文章原文 │ └── general/{行业}/ # 通用网页原文 └── sources/ # 结构化Markdown(含frontmatter) ├── AI芯片/ ├── 新能源/ ├── 消费/ └── ...(按行业分类)
结构化来源页格式
source_type: wechat_article|futu_article|xueqiu_article|网页_article url: https://... title: 文章标题 source: 微信公众号|富途牛牛|雪球|... industry: AI芯片 author: 作者/公众号名 publish_date: YYYY-MM-DD fetched_date: YYYY-MM-DD content_length: 字符数 fetch_method: browser_navigate|playwright|tavily|firecrawl|网页_提取
# 文章标题
基本信息
| 字段 | 内容 |
|---|---|
| 来源 | 微信公众号 |
| 行业 | AI芯片 |
| 作者 | ... |
| 发布时间 | ... |
| 原文链接 | 链接 |
| 抓取方法 | browser_navigate |
文章内容
(清理后的正文)
关键词
#wechat #AI芯片 #文章 #知识库
导航冗余内容自动清理
内置关键词列表,自动移除导航菜单、登录提示、广告等:
行情工具, 报价, 股票报价, 投资工具, 模拟交易, 选股器, 资讯及牛牛圈, 新闻, 焦点新闻, 7×24快讯, 牛牛圈, 关于我们, 帮助, English, 繁體中文, 注册/登入, 新客限时, 立即领取, 刷新, 加载中, 热门资讯, 行情, 资讯, 课堂, 港股, 美股, 沪深, 公告, 研报
执行流程(面向Apollo的标准操作)
当用户发送文章URL时,按以下步骤执行:
Step 1: URL规范化 + 平台识别
- 检查URL是否包含 mp.weixin.qq.com → 追加 ?scene=1
- 富途URL (news.futunn.com) → 清理跟踪参数,只保留 https://news.futunn.com/post/{ID}
- 识别平台类型(wechat/futu/xueqiu/eastmoney/general)
- 选择对应的提取策略(见下方 Step 2 各平台指令)
Step 2: 提取内容(按优先级回退) 方法1: Hermes browser_navigate(首选,速度快)
通用流程:
- browser_navigate(url) → 打开URL
- browser_snapshot(full=true) → 获取页面完整可访问性树
- 从snapshot中按平台规则提取标题/作者/正文
- 如内容为空或检测到验证码 → 回退方法2
⚠️ 各平台从 browser_snapshot 提取规则(关键!):
富途牛牛 (news.futunn.com)
snapshot结构特征:
heading: "报道称OpenAI未达销售目标,相关股票大跌" ← 标题:取第一个 heading 节点 link: "环球市场播报" ← 作者:标题后第一个 link(来源站名) text: "43分钟前" ← 时间:作者后含数字+时间单位的 text text: "OpenAI的合作伙伴..." ← 正文:从第一个长 text 开始 text: "编辑/lambor" ← 正文结束标志 link: "CRWV CoreWeave 106.210 -5.850..." ← 行情组件:跳过
提取规则:
标题:取 heading 角色节点的 name 值 作者:取标题后第一个 link 角色节点(是来源站名如"环球市场播报") 时间:取作者后含"分钟前/小时前/天前/前天"的 text 节点 正文:从第一个长 text 节点(>30字符)开始,到"编辑/"行结束 跳过:股票行情组件(含价格+涨跌幅的 link 节点)、热点推荐、免责声明、"赞/评论/浏览"、页脚 微信公众号 (mp.weixin.qq.com)
snapshot结构特征:
heading: "文章标题" ← 标题 text: "公众号名称" ← 作者(公众号名) text: "2026-04-28 18:30" ← 时间(标准日期格式) text: "正文第一段..." ← 正文
提取规则:
标题:取 heading 角色节点 作者:取标题后第一个非链接的 text 节点(公众号名) 时间:取含 YYYY-MM-DD 格式的 text 节点 正文:从时间后第一个长 text 开始到文末 ⚠️ 验证码:snapshot 中出现"访问 Verification"/"请完成验证"→ 立即回退方法2 雪球 (xueqiu.com) 标题:取 heading 角色节点 作者:取 class 含 "user" 的元素或作者名 text 正文:从"正文内容"区域提取 ⚠️ 验证码:雪球常见 WAF 拦截→回退方法2(Tavily) 通用网页 标题:取第一个 heading 节点,或 网页Area 的 name 正文:取 mAIn 或 article 角色节点下的所有 text 节点,拼接 跳过:navigation/banner/footer/complementary 角色节点 方法2-5: 回退到 Python 脚本 python3 ~/.hermes/技能s/网页-article-to-obsidian/scripts/unified_fetch.py