网页内容抓取器Skill web-fetch

网页内容抓取器是一个自动化工具,能够智能获取网页内容并转换为干净的markdown格式。它通过优先识别原生markdown响应,配合CSS选择器精准提取网页正文内容,支持多种知名网站的特殊处理,并提供回退机制确保提取成功率。适用于文档抓取、内容聚合、知识库构建等场景。关键词:网页抓取、HTML转markdown、内容提取、自动化工具、文档处理、爬虫技术、数据采集。

后端开发 0 次安装 30 次浏览 更新于 2/23/2026

名称: web-fetch 描述: 通过优先获取原生markdown格式响应,并在失败时回退到基于选择器的HTML提取,获取网页内容并转换为干净的markdown格式。适用于http/https网址的文档、文章和参考页面。

网页内容获取

按以下顺序获取网页内容:

  1. 优先使用原生markdown端点(content-type: text/markdown
  2. 对已知网站使用基于选择器的HTML提取
  3. 当选择器失败时使用捆绑的Bun回退脚本

前提条件

提取前验证所需工具:

command -v curl >/dev/null || echo "需要安装curl"
command -v html2markdown >/dev/null || echo "HTML提取需要html2markdown"
command -v bun >/dev/null || echo "fetch.ts回退需要bun"

安装捆绑脚本的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

已知网站选择器

网站 包含选择器 排除选择器
platform.claude.com #content-container -
docs.anthropic.com #content-container -
developer.mozilla.org article -
github.com (文档) article nav,.sidebar
通用 article,main,[role=main] nav,header,footer,script,style

示例:

curl -sL "<url>" \
  | html2markdown \
      --include-selector "#content-container" \
      --exclude-selector "nav,header,footer"

查找正确的选择器

当网站不在模式列表中时:

# 检查存在哪些内容容器
curl -s "<url>" | grep -o '<article[^>]*>\|<main[^>]*>\|id="[^"]*content[^"]*"' | head -10

# 测试选择器
curl -sL "<url>" | html2markdown --include-selector "<selector>" | head -30

# 检查行数
curl -sL "<url>" | html2markdown --include-selector "<selector>" | wc -l

通用回退脚本

当选择器产生不良输出时,运行捆绑的解析器:

bun ~/.claude/skills/web-fetch/fetch.ts "<url>"

如果已在技能目录中:

bun fetch.ts "<url>"

选项参考

--include-selector "CSS"  # 仅保留匹配元素
--exclude-selector "CSS"  # 移除匹配元素
--domain "https://..."    # 将相对链接转换为绝对链接

故障排除

选择器输出为空:页面可能是原生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脚本都无法提取;请使用基于浏览器的工具。