WebFetch MD - 网页转 Markdown
抓取任意网页,转换为干净的 Markdown 格式,保留图片链接。
使用方法
作为 OpenClaw 工具调用
webfetch-md url="https://example.com"
CLI 使用
# 基本使用(输出 JSON 格式)
npx webfetch-md https://example.com
# 或使用 --url 参数
npx webfetch-md --url https://example.com
# 提取 Markdown 内容(配合 jq)
npx webfetch-md https://example.com | jq -r '.markdown'
# 保存到文件
npx webfetch-md https://example.com | jq -r '.markdown' > article.md
输出格式
CLI 和工具都输出统一的 JSON 格式:
{
"success": true,
"title": "文章标题",
"markdown": "# 文章标题\n\n正文内容...",
"images": ["https://example.com/img1.png"],
"imageCount": 1,
"contentLength": 1523
}
作为模块使用
const { fetchAsMarkdown } = require('./index');
const result = await fetchAsMarkdown('https://example.com');
console.log(result.markdown);
功能特点
- ✅ 抓取任意网页 HTML
- ✅ 智能提取正文内容(过滤导航、广告等)
- ✅ 保留图片链接(转换为
格式) - ✅ 自动转换相对路径为绝对路径
- ✅ 输出干净的 Markdown
依赖
- turndown: HTML to Markdown 转换
- cheerio: HTML 解析和提取
技术实现
核心流程
- 网页抓取:使用 fetch API 获取 HTML,模拟浏览器 User-Agent
- HTML解析:使用 cheerio 加载和解析 HTML 内容
- 内容提取:智能识别正文区域,过滤无关元素
- URL处理:将相对路径转换为绝对路径
- Markdown转换:使用 turndown 转换为标准 Markdown 格式
智能内容提取算法
按优先级选择正文容器:
article标签main标签[role="main"]属性.post-content/.entry-content类.content/.post类#content/#mainID- 回退到
body标签
自动过滤的元素
- 脚本和样式标签
- 导航、页眉、页脚
- 侧边栏和广告区域
- 评论区
错误处理
工具返回统一的 JSON 格式,包含 success 字段标识操作状态:
{
"success": false,
"error": "错误信息"
}
开发说明
项目结构
webfetch-md/
├── index.js # 核心功能模块
├── cli.js # CLI 和 OpenClaw 工具入口
├── package.json # 依赖配置
├── test.js # 测试脚本
└── SKILL.md # 技能文档
测试
# 运行测试
npm test
# 或直接测试
node test.js https://example.com
版本历史
- v1.1.0 (当前): 统一 CLI 和 OpenClaw 工具入口,优化错误处理
- v1.0.1: 基础功能实现,支持网页抓取和 Markdown 转换
- v1.0.0: 初始版本发布