WeSpy
WeSpy 是一个用于获取wx公众号文章并转换为 Markdown 格式的 Python 工具
Install / Use
/learn @tianchangNorth/WeSpyREADME
WeSpy
WeSpy 是一个用于获取wx公众号文章并转换为 Markdown 格式的 Python 工具,支持图片防盗链处理、专辑批量下载和多种输出格式。
特性
- 🚀 智能文章提取:自动识别文章标题、作者、发布时间和正文内容
- 📱 wx公众号支持:专门优化wx公众号文章的提取,支持长短链接自动转换
- 🎵 专辑批量下载:支持微信公众号专辑文章批量获取和下载
- 🖼️ 图片防盗链处理:自动处理图片防盗链问题,确保图片正常显示
- 📝 灵活输出配置:默认只输出 Markdown,可选择 HTML 和 JSON 格式
- 🌐 通用网页支持:支持大多数网站的文章提取
- 🎯 命令行友好:提供简单易用的命令行界面
- 📂 批量处理:支持批量处理多个文章链接和专辑文章
安装
使用 pip 安装(推荐)
pip install wespy
从源码安装
git clone https://github.com/tianchang/wespy.git
cd wespy
pip install -e .
快速开始
命令行使用
# 获取wx公众号文章(默认只输出 Markdown)
wespy "https://mp.weixin.qq.com/s/xxxxx"
# 指定输出目录
wespy "https://mp.weixin.qq.com/s/xxxxx" -o /path/to/output
# 输出 Markdown + HTML 格式
wespy "https://example.com/article" --html
# 输出 Markdown + JSON 格式
wespy "https://example.com/article" --json
# 输出所有格式(HTML + JSON + Markdown)
wespy "https://example.com/article" --all
# 显示详细信息
wespy "https://example.com/article" -v
# === 微信专辑功能 ===
# 获取微信专辑文章列表(不下载内容)
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --album-only
# 批量下载微信专辑文章(默认下载前10篇)
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..."
# 限制专辑文章下载数量
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --max-articles 5
# 下载专辑文章并保存所有格式
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --max-articles 5 --all
交互式使用
如果不提供任何参数,程序会进入交互模式:
wespy
然后根据提示输入文章 URL、输出目录和输出格式选择:
- 仅 Markdown(默认)
- Markdown + HTML
- Markdown + JSON
- 全部格式(HTML + JSON + Markdown)
Python API 使用
from wespy import ArticleFetcher
from wespy.main import WeChatAlbumFetcher
# 创建文章获取器实例
fetcher = ArticleFetcher()
# 获取单篇文章(默认只输出 Markdown)
article_info = fetcher.fetch_article(
url="https://mp.weixin.qq.com/s/xxxxx",
output_dir="articles"
)
# 获取文章并指定输出格式
article_info = fetcher.fetch_article(
url="https://mp.weixin.qq.com/s/xxxxx",
output_dir="articles",
save_html=True, # 同时保存HTML文件
save_json=True, # 同时保存JSON文件
save_markdown=True # 保存Markdown文件(默认为True)
)
if article_info:
print(f"标题: {article_info['title']}")
print(f"作者: {article_info['author']}")
print(f"发布时间: {article_info['publish_time']}")
# === 微信专辑功能 ===
# 创建专辑获取器
album_fetcher = WeChatAlbumFetcher()
# 仅获取专辑文章列表
articles = album_fetcher.fetch_album_articles(
"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=...",
max_articles=20 # 限制获取数量
)
print(f"获取到 {len(articles)} 篇文章")
# 批量下载专辑文章
successful_articles = fetcher.fetch_album_articles(
album_url="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=...",
output_dir="articles",
max_articles=10,
save_html=True,
save_json=True,
save_markdown=True
)
print(f"成功下载 {len(successful_articles)} 篇文章")
输出格式
WeSpy 默认只生成 Markdown 文件,但可以通过配置选项选择其他格式:
默认输出(仅 Markdown)
articles/
└── 文章标题_1627834567.md # Markdown格式
可选格式
- HTML 文件:原始 HTML 内容(使用
--html选项) - JSON 文件:文章元数据信息(使用
--json选项) - Markdown 文件:转换后的 Markdown 格式内容(默认生成)
全部格式输出示例
articles/
├── 文章标题_1627834567.html # 原始HTML
├── 文章标题_1627834567.md # Markdown格式
└── 文章标题_1627834567_info.json # 元数据信息
JSON 元数据格式
{
"title": "文章标题",
"author": "作者名称",
"publish_time": "2023-07-30",
"url": "https://example.com/article",
"html_file": "文章标题_1627834567.html",
"fetch_time": "2023-07-30 12:34:56"
}
支持的网站
完全支持
- wx公众号 (mp.weixin.qq.com)
- 大部分基于标准 HTML 结构的博客和新闻网站
通用支持
WeSpy 使用智能算法尝试从以下元素中提取内容:
<article>标签- 带有
content、article-content、post-content等 class 的元素 <main>标签- 标准的 meta 标签信息
命令行选项
wespy [-h] [-o OUTPUT] [-v] [--html] [--json] [--all] [--max-articles MAX_ARTICLES] [--album-only] url
获取文章内容并转换为Markdown,支持微信专辑批量下载
positional arguments:
url 文章URL或微信专辑URL
optional arguments:
-h, --help 显示帮助信息
-o OUTPUT, --output OUTPUT
输出目录 (默认: articles)
-v, --verbose 显示详细信息
--html 同时保存HTML文件
--json 同时保存JSON信息文件
--all 保存所有格式文件 (HTML, JSON, Markdown)
--max-articles MAX_ARTICLES
微信专辑最大下载文章数量 (默认: 10)
--album-only 仅获取专辑文章列表,不下载内容
输出格式选项说明
- 默认行为:只生成 Markdown 文件
--html:生成 Markdown + HTML 文件--json:生成 Markdown + JSON 文件--all:生成所有格式文件(HTML + JSON + Markdown)
微信专辑功能
功能介绍
WeSpy 支持微信公众号专辑文章的批量获取和下载,可以一次性下载整个专辑中的所有文章。
使用方式
仅获取文章列表
使用 --album-only 参数只获取专辑中的文章列表,不下载具体内容:
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --album-only
输出示例:
获取到 25 篇文章:
1. 文章标题一
URL: http://mp.weixin.qq.com/s?__biz=...
时间: 1704067200
2. 文章标题二
URL: http://mp.weixin.qq.com/s?__biz=...
时间: 1703980800
文章列表会保存为JSON文件,包含标题、URL、发布时间等完整信息。
批量下载专辑文章
直接使用专辑URL即可批量下载专辑中的所有文章:
# 下载前10篇文章(默认)
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..."
# 限制下载文章数量
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --max-articles 5
# 下载并保存所有格式
wespy "https://mp.weixin.qq.com/mp/appmsgalbum?__biz=...&album_id=..." --max-articles 5 --all
输出结构
专辑文章下载后会创建独立的专辑目录:
articles/
├── album_1703980800/ # 专辑专用目录
│ ├── 文章标题一_1703980800.md # Markdown格式
│ ├── 文章标题一_1703980800_info.json # 文章信息
│ ├── 文章标题二_1703980801.md # 下一篇文章
│ └── ...
└── album_1703980800_summary.json # 专辑下载汇总信息
汇总信息
每个专辑下载完成后会生成详细的汇总报告,包含:
- 专辑URL和下载时间
- 成功/失败统计
- 成功下载的文章列表
- 失败的文章列表和错误信息
技术特性
- 智能分页:自动处理微信分页获取,支持大型专辑
- 错误处理:分离成功和失败的文章,确保部分失败不影响整体下载
- 速率控制:内置延迟机制避免请求过快
- 进度显示:实时显示下载进度和统计信息
依赖要求
- Python 3.6+
- requests >= 2.20.0
- beautifulsoup4 >= 4.9.0
开发
开发环境设置
git clone https://github.com/tianchang/wespy.git
cd wespy
pip install -e ".[dev]"
运行测试
python -m pytest tests/
代码格式化
black wespy/
flake8 wespy/
常见问题
Q: 为什么有些图片无法显示?
A: WeSpy 使用 images.weserv.nl 作为代理服务来解决图片防盗链问题。如果仍然无法显示,可能是原图片已被删除或网络问题。
Q: 支持哪些网站?
A: WeSpy 对wx公众号有特别优化,对大部分使用标准 HTML 结构的网站都有较好的支持。如果某个网站不支持,欢迎提交 issue。
Q: 如何批量处理文章?
A: 目前需要通过脚本调用 Python API 来实现批量处理,命令行版本暂不支持批量处理。
贡献
欢迎提交 issue 和 pull request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
许可证
本项目使用 MIT 许可证。详见 LICENSE 文件。
更新日志
v0.2.0 (2025-01-22)
- 🎵 新增微信专辑功能:支持微信公众号专辑文章批量获取和下载
- 📝 增强命令行选项:
--max-articles、--album-only用于专辑操作 - 🔗 智能链接转换:自动检测并转换微信长链接为短链接
- 📊 详细汇总报告:专辑下载完成后生成详细的统计报告
- 🚀 优化错误处理:分离成功和失败的文章,提升批量处理稳定性
- ⚡ 性能优化:内置速率控制机制避免请求过快
- 📁 改进文件组织:专辑文章保存到独立目录,便于管理
v0.1.2 (2025-01-01)
- 改进输出格式配置:默认只输出 Markdown 文件
- 新增命令行选项:
--html、--json、--all用于控制输出格式 - 优化交互模式:添加输出格式选择菜单
- 更新 Python API:支持参数化输出格式控制
v0.1.0 (2023-07-30)
- 初始版本发布
- 支持wx公众号文章提取
- 支持通用网页文章提取
- 支持 HTML/JSON/Markdown 多格式输出
- 图片防盗链处理
- 命令行界面
联系方式
- GitHub: https://github.com/tianchangNorth/WeSpy
- Issues: https://github.com/tianchangNorth/WeSpy/issues
推荐🐔场
自用🐔场,稳定,线路多,速度快,点这里注册
免责声明
本项目仅供学习和研究目的使用。使用本工具时,请务必遵守以下原则:
使用责任
- 用户需自行承担使用本工具的所有风险和责任
- 请确保您的使用行为符合目标网站的robots.txt文件要求
- 尊重内容创作者的知识产权,不得用于商业目的
- 不要对网站服务器造成过大的访问压力
法律合规
- 请遵守当地法律法规以及目标网站的使用条款
- 不得将本工具用于任何非法或未经授权的活动
- 下载的内容应仅用于个人学习、研究或存档目的
技术风险
- 网站结构可能随时变化,本工具可能无法正常工作
- 本工具按"原样"提供,不提供任何明示或暗示的保证
- 开发者不对因使用本工具造成的任何损失承担责任
数据安全
- 本工具不会收集或上传您的任何个人信息
- 所有数据处理都在本地完成
- 请妥善保管您下载的内容
重要提醒: 请合理、合法、负责任地使用本工具,尊重网络服务提供者和内容创作者的权益.
