将网页内容下载并转换为 Markdown 格式,自动下载图片到本地
支持 微信公众号文章 下载,图文完整保存,离线阅读无忧
功能特点 • 安装 • 使用方法 • 输出示例 • English
- 智能内容提取 — 自动识别主要内容区域(
article、main、.content等语义标签) - 保守广告过滤 — 仅移除明确的广告和追踪元素,保留页面原始结构
- 图片本地化
- 下载所有图片到本地
images/目录 - 支持懒加载图片(
data-src、data-original属性) - 支持多种格式(JPG、PNG、GIF、WebP、SVG)
- 自动去重和文件名冲突处理
- 下载所有图片到本地
- 多编码支持 — UTF-8、GBK、GB18030、Big5 等中英文编码自动检测
- 表格保留 — HTML 表格完整转换为 Markdown 格式
- 链接处理 — 相对 URL 自动转换为绝对 URL
将 web-to-markdown 目录复制到 Claude Code 的 skills 目录:
cp -r web-to-markdown ~/.claude/skills/pip install requests beautifulsoup4 html2text
# 可选:更准确的编码检测
pip install chardet/web-to-markdown https://mp.weixin.qq.com/s/xxxxxx
/web-to-markdown https://example.com/article
/web-to-markdown https://mp.weixin.qq.com/s/xxxxxx -o ./wechat-articles
/web-to-markdown https://example.com/article -o ./docs -f readme.md
Claude 会自动识别以下意图并执行转换:
| 用户输入 | Claude 操作 |
|---|---|
| "下载这篇微信公众号文章: https://mp.weixin.qq.com/s/..." | 完整保存微信文章及图片 |
| "帮我把这个网页保存为 markdown: https://..." | 识别意图后执行转换 |
| "下载这篇文章" + URL | 下载并转换为 Markdown |
| "保存这个网页内容" + URL | 保存网页内容到本地 |
转换完成后,Markdown 文件格式如下:
# 文章标题
**来源**: https://mp.weixin.qq.com/s/xxxxxx
**图片保存位置**: `./images/`
---
正文内容...

更多内容...URL 输入
│
▼
┌──────────────┐
│ 获取网页内容 │ ← 模拟浏览器 User-Agent
│ 检测编码 │ ← HTTP headers + chardet 多级回退
└──────┬───────┘
│
▼
┌──────────────┐
│ 提取主要内容 │ ← article / main / .content 语义选择器
│ 过滤广告元素 │ ← 仅移除明确的广告和追踪元素
└──────┬───────┘
│
▼
┌──────────────┐
│ 处理图片 │ ← 下载到本地 images/ 目录
│ 更新引用路径 │ ← 支持懒加载、自动去重
└──────┬───────┘
│
▼
┌──────────────┐
│ HTML → MD │ ← html2text 转换
│ 添加元信息头 │ ← 标题、来源、图片路径
└──────┬───────┘
│
▼
输出 .md 文件
web-to-markdown/
├── SKILL.md # Skill 定义文件
└── scripts/
└── web_to_markdown.py # 核心转换脚本
| 包名 | 必需 | 说明 |
|---|---|---|
requests |
是 | HTTP 请求 |
beautifulsoup4 |
是 | HTML 解析 |
html2text |
是 | HTML 转 Markdown |
chardet |
否 | 编码检测(提高准确性) |
| 错误类型 | 处理方式 |
|---|---|
| 网络错误 | 提示用户检查 URL 是否可访问 |
| 编码错误 | 多编码自动回退(UTF-8 → GBK → GB18030 → Big5 → ISO-8859-1) |
| 权限错误 | 检查输出目录是否可写 |
| 依赖缺失 | 自动安装缺少的 Python 包 |
MIT License