web-fetch 是一个网页内容抓取技能,目标是把网页抓取为干净的 Markdown 文本。
用途 该技能用于按固定优先级抓取网页内容并转换为 Markdown:优先使用 Markdown 原生端点(content-type: text/markdown),其次对已知站点使用基于选择器的 HTML 提取,最后在选择器失效时使用内置的 Bun 兜底脚本。适合抓取文档、参考资料等类型的网页。
前置要求 提取前需确认所需工具是否可用:
command -v curl >/dev/null || echo "curl is required" command -v html2markdown >/dev/null || echo "html2markdown is required for HTML extraction" command -v bun >/dev/null || echo "bun is required for fetch.ts fallback"
为内置脚本安装 Bun 依赖:
cd ~/.claude/skills/web-fetch && bun install
默认工作流 对任意 URL 使用以下默认流程:
URL="<url>" CONTENT_TYPE="$(curl -sIL "$URL" | awk -F': ' 'tolower($1)=="content-type"{print tolower($2)}' | tr -d '\r' | tail -1)"
if echo "$CONTENT_TYPE" | grep -q "markdown"; then
curl -sL "$URL"
else
curl -sL "$URL"
| html2markdown
--include-selector "article,main,[role=main]"
--exclude-selector "nav,header,footer,script,style"
fi
已知站点选择器
| 站点 | Include Selector | Exclude Selector |
|---|---|---|
| platform.claude.com | #content-container | - |
| docs.anthropic.com | #content-container | - |
| developer.mozilla.org | article | - |
| github.com (docs) | article | nav,.sidebar |
| Generic | article,main,[role=main] | nav,header,footer,script,style |
示例:
curl -sL "<url>"
| html2markdown
--include-selector "#content-container"
--exclude-selector "nav,header,footer"
查找正确的选择器 当站点不在已知模式列表中时:
Check what content containers exist
curl -s "<url>" | grep -o '<article[^>]>|<main[^>]>|id="[^"]content[^"]"' | head -10
Test a selector
curl -sL "<url>" | html2markdown --include-selector "<selector>" | head -30
Check line count
curl -sL "<url>" | html2markdown --include-selector "<selector>" | wc -l
通用兜底脚本 当选择器输出效果不佳时,运行内置解析脚本:
bun ~/.claude/skills/web-fetch/fetch.ts "<url>"
如果已位于技能目录内:
bun fetch.ts "<url>"
选项参考 --include-selector "CSS" # Keep only matching elements --exclude-selector "CSS" # Remove matching elements --domain "https://..." # Convert relative links to absolute
故障排查
- 选择器输出为空:页面可能是 Markdown 原生,先检查响应头:curl -sIL "<url>" | grep -i '^content-type:'
- 选错内容:站点可能有多个 article/main 区域:curl -s "<url>" | grep -o '<article[^>]*>'
- 找不到 html2markdown:先安装它,再重试基于选择器的提取。
- bun 或脚本依赖缺失:运行 cd ~/.claude/skills/web-fetch && bun install。
- 缺失代码块:检查站点是否使用了非标准代码格式。
- 客户端渲染内容:如果 HTML 只有 "Loading..." 占位符,说明内容由 JS 渲染。curl 和 Bun 脚本都无法提取,需要使用基于浏览器的工具。
限制 该技能依赖 curl、html2markdown、bun 等外部工具;对于纯客户端(JS)渲染的页面,curl 与内置 Bun 脚本均无法提取内容,需改用基于浏览器的工具。收费、价格与平台等信息暂未提供。