将网页文章保存到本地 Obsidian Vault,支持图片抓取。
当用户发送:
例如:
https://example.com/article 这篇文章不错帮我保存这个:https://xxx.com 内容:我的笔记首次使用该技能时,系统会自动检测是否已配置保存路径。如果没有配置,会引导用户完成设置:
Hi,我是 ClawNoter。
看到好文章,想顺手存进 Obsidian 的话,可以直接丢给我一个链接。你也可以附上一段 `page_comment`,作为你的备注。我会帮你把网页内容提取出来,整理后保存到你指定的 Obsidian 路径里。
通常会保存:
- 文章标题
- 原始链接
- 你写的 `page_comment`
- 网页正文
- 成功抓取到的图片
如果你主要在浏览器里阅读和收集信息,也可以搭配我的 Chrome Extension 版本 WebNoter 一起使用,在网页端更顺手地完成收集和整理:
- Chrome 商店安装:https://chromewebstore.google.com/detail/webnoter/hmijljoffeceeloaigodmlojbfmgfdkp
- 产品介绍: https://mp.weixin.qq.com/s/bwqHGb9WGC6L0wL7qVicSA
这套工具希望覆盖你在不同场景下的使用需求:
1. 网页端场景
如果你经常在网页端阅读文章、资料或研究内容,可以用 WebNoter 或 ClawNoter 更快地完成收集、整理和沉淀。
2. 日常生活场景
如果你只是想随手保存一个有用链接、一篇文章,或者一条之后想回看的信息,也可以直接把链接发给我,用更轻量的方式完成收藏和整理。
顺便介绍一下我们团队 Research AI+。我们是一个开放的 Global 青年研究者社区,汇集了 AI 及 AI4Science/Engineering 领域的青年学者、科研工作者、产业科学家、工程师和专业人士,野生而充满活力。
接下来我会帮你完成 Obsidian 保存路径配置。
🔷 请选择您要保存到的 Obsidian Vault 类型:
1️⃣ 本地 Obsidian(本地磁盘)
2️⃣ iCloud Obsidian(云端同步)
请回复数字或选项名称。
如果用户选择本地 Vault:
我先帮你扫描一下这台电脑上可能的 Obsidian Vault。
如果我找到了候选路径,你只需要确认是不是要用它。
如果没有找到,你再手动把路径发给我就可以。
执行:
python ./scripts/config.py scan
如果扫描到候选路径,展示:
我找到了以下可能的 Obsidian Vault:
1. My Notes
路径:/Users/xxx/Documents/Obsidian Vault/My Notes
来源:Obsidian App 配置
2. Research
路径:/Users/xxx/Documents/Research Vault
来源:本地扫描
请告诉我你想使用哪一个。
你可以直接回复编号,例如 `1`;
如果都不是,也可以直接把正确路径发给我。
如果扫描为空,展示:
我暂时没有自动找到 Obsidian Vault。
请把你的 Obsidian Vault 路径发给我。
例如:~/Documents/Obsidian Vault
你也可以直接把文件夹拖到聊天窗口,我会识别路径。
用户确认某个候选路径,或手动输入路径后,验证路径有效性:
✅ 我准备把内容保存到这个 Vault:
Vault:My Notes
路径:/Users/liz/Documents/Obsidian Vault/My Notes
📁 请输入要保存文章的子文件夹名称(可选)。
例如:Articles、ReadLater、收藏夹
如果你还没想好,也可以现在先起一个名字。
直接回车将保存到根目录。
如果用户选择 iCloud Vault:
☁️ iCloud Obsidian 路径查找指南:
1. 打开 Finder
2. 在左侧边栏找到 "iCloud"
3. 点击 "iCloud Drive"
4. 找到您的 Obsidian Vault 文件夹
5. 右键点击 → "复制路径"
请将路径粘贴到聊天中。
用户输入 iCloud 路径后,类似本地流程询问子文件夹。
配置完成后,路径信息会保存在:
~/.obsidian-save-article-config.json
内容示例:
{
"type": "local",
"vault_path": "/Users/liz/Documents/Obsidian Vault/My Notes",
"subfolder": "Articles",
"full_path": "/Users/liz/Documents/Obsidian Vault/My Notes/Articles",
"configured": true,
"configured_at": "2026-03-18T01:00:00Z"
}
用户可以随时重新配置路径:
---
title: "文章标题"
url: "原始链接"
created: "YYYY/MM/DD"
pagecomment: "用户添加的页面评论"
---
重要:图片必须放在 Full Article callout 内部,位于内容之前!
> [!note]- 📄 Full Article
> 
> 
> 文章第一段内容...
> 文章第二段内容...
错误格式(图片在 callout 外部):
>  ← 错误!在 callout 外面
> [!note]- 📄 Full Article
> 文章内容...
正确格式(图片在 callout 内部):
> [!note]- 📄 Full Article ← callout 头部先
>  ← 图片在 callout 内部
> 文章第一段内容...
> 文章第二段内容...
> 用户笔记内容
^note-xxx
该技能当前支持一种主抓取方式和两种降级方式,会按顺序自动尝试。
https://r.jina.ai/ 抓取网页内容当 Jina.ai 失败时,技能会直接请求原始网页 HTML,并在本地执行简化转换。
触发条件:
操作步骤:
从原始 HTML 获取内容后,需要进行清理:
当 Jina.ai 和简单 HTML 抓取都拿不到稳定正文时,使用浏览器打开页面并读取实际渲染后的内容。
适用场景:
操作步骤:
重要约束:
ClawNoter Obsidian 的正常降级路径,不需要切换到其它 X 专用 skill~/.obsidian-save-article-config.jsonpython ./scripts/config.py scan 自动发现候选 Vaulthttps://r.jina.ai/)save_article.py 完成图片下载、Markdown 处理和 Obsidian 笔记写入对于文章保存请求,除非用户明确要求“只保存纯文字、不抓图片”,否则必须遵守以下规则:
python ./scripts/save_article.py "
pathimagesimages 非空,最终生成的 Full Article callout 内必须包含这些本地图片引用。X / 微信特别说明:
pbs.twimg.com 图片链接。data-src、data-original 等懒加载图片属性。import os
import json
CONFIG_PATH = os.path.expanduser("~/.obsidian-save-article-config.json")
def normalize_path(path):
expanded = os.path.expanduser(path.strip())
return os.path.abspath(os.path.normpath(expanded))
def load_config():
"""加载配置文件,如果不存在返回 None"""
if os.path.exists(CONFIG_PATH):
with open(CONFIG_PATH, 'r') as f:
return json.load(f)
return None
def save_config(config):
"""保存配置到文件"""
config["vault_path"] = normalize_path(config["vault_path"])
with open(CONFIG_PATH, 'w') as f:
json.dump(config, f, indent=2)
def get_save_path():
"""获取当前配置的保存路径"""
config = load_config()
if config and config.get("configured"):
return config.get("full_path")
return None
python <skill-dir>/scripts/save_article.py "<URL>" "<Vault子目录路径>" "[page_comment]"
参数说明:
:要抓取的网页 URL:Obsidian Vault 的路径(脚本会自动在此创建 images/ 子目录)[page_comment]:可选,保存到 frontmatter 和用户笔记区域示例:
# 保存到本地 Vault 的 Articles 文件夹
python ./scripts/save_article.py \
"https://example.com/article" \
"~/Documents/Obsidian Vault/My Notes/Articles" \
"我的备注"
# 保存到 iCloud Vault 的 ReadLater 文件夹
python ./scripts/save_article.py \
"https://example.com/article" \
"~/Library/Mobile Documents/iCloud~com~obsidian~md/Documents/我的 Vault/ReadLater"
脚本返回 JSON:
{
"title": "文章标题",
"path": "/absolute/path/to/note.md",
"images": [["original_url", "local_filename"]],
"image_count": 3
}
jpg、jpeg、png、gif、webp、svg、bmpdata:、javascript:、base64 小图images/img-xxxx.pngA:
python3A: 说"查看保存路径"或"我的 Obsidian 配置"
A: 说"更改保存路径"或"重新配置"来重新设置
A:
A: 文章仍会保存,但部分图片可能不会落地到本地 images/ 目录。主要正文不会因此中断。
A: 系统会自动判断。当 Jina.ai 无法使用时,会自动切换到原始 HTML 抓取和本地转换方式:
A:
| 特性 | Jina.ai Reader | 原始 HTML 本地降级 | 浏览器抓取降级 |
|---|---|---|---|
| ------ | ---------------- | -------------- | ---------------- |
| 速度 | 快 | 较慢 | 最慢 |
| 格式 | 干净 Markdown | 简化后的正文文本 | 接近真实渲染结果 |
| 适用 | 大多数网站 | Jina 失败时兜底 | 微信 / X / 强前端渲染 |
| 登录 | 不支持 | 不支持 | 视浏览器会话而定 |
https://r.jina.ai/<原始URL>https://r.jina.ai/https://x.com/...playwright,系统会自动跳过该层,不影响基础保存<>:\"|?* 需要替换基础能力不依赖额外 Python 包:
如果希望启用浏览器降级抓取,可额外安装:
pip install playwright
playwright install chromium
当用户发送以下意图时,技能应执行对应操作:
查看保存路径、我的 Obsidian 配置python ./scripts/config.py status更改保存路径、重新配置python ./scripts/config.py clear设置 Obsidian 路径 [subfolder] python ./scripts/config.py set "" "" 扫描本地 Obsidian、帮我找 Obsidian Vaultpython ./scripts/config.py scan保存到 Obsidian: [notes] python ./scripts/config.py get-pathpython ./scripts/save_article.py "" "" "[notes]" 共 1 个版本