使用 github.com/elazarl/goproxy 库编写的HTTP代理,专门用于抓取微信公众号文章内容并转换为Markdown格式存储。
- 🔍 自动监听微信公众号文章列表请求
- 📄 抓取文章内容并转换为Markdown格式
- 📁 按日期分类存储文章
- 🔄 自动去重,避免重复抓取
- ⚙️ 支持配置文件和命令行参数
- 🛡️ 优雅的错误处理和重试机制
- 🌐 自动系统代理配置(跨平台支持)
- 🚀 参考 wx_channels_download 项目实现
go mod download# 编译
go build -o wechat-proxy cmd/main.go
# 运行(需要手动配置浏览器代理)
./wechat-proxy# 自动配置系统代理(需要管理员/管理员权限)
# 首次使用建议先安装根证书
sudo ./wechat-proxy -install-cert
# 然后启动代理(自动配置系统代理)
sudo ./wechat-proxy -auto-proxy
# 指定端口和输出目录
sudo ./wechat-proxy -auto-proxy -port 8080 -output ./articles# 安装根证书到系统(需要管理员权限)
sudo ./wechat-proxy -install-cert
# 卸载根证书
sudo ./wechat-proxy -uninstall-cert# 禁用证书管理,仅支持HTTP
./wechat-proxy -no-cert./wechat-proxy -port 8080 -output ./articles./wechat-proxy -config config.json创建 config.json 文件:
{
"port": 8888,
"output_dir": "./wechat_articles",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"max_retries": 3,
"timeout": 30
}跨平台支持 - 参考了 wx_channels_download 项目的实现:
- 自动修改注册表设置系统代理
- 需要管理员权限运行
- 支持 HTTP/HTTPS 代理配置
- 使用
networksetup命令自动配置 - 支持 Wi-Fi 和有线网络接口
- 需要管理员权限
- 自动检测桌面环境(GNOME/KDE/XFCE)
- 使用
gsettings或kwriteconfig5配置 - 支持环境变量作为备选方案
如果不使用 -auto-proxy 参数,需要手动配置:
-
设置浏览器代理:
- HTTP代理:
127.0.0.1:8888(或指定端口) - HTTPS代理:
127.0.0.1:8888
- HTTP代理:
-
系统代理设置(可选):
- Windows:设置 → 网络和Internet → 代理
- macOS:系统偏好设置 → 网络 → 高级 → 代理
- Linux:根据桌面环境配置
-
以管理员权限启动代理(自动配置系统代理):
sudo ./wechat-proxy -auto-proxy
-
访问微信公众号:
- 打开微信网页版或微信公众号页面
- 访问目标公众号的文章列表
- 系统代理已自动配置,所有流量将通过代理
-
自动抓取:
- 代理会自动检测文章列表请求
- 抓取文章内容并转换为Markdown
- 保存到指定的输出目录
-
启动代理(不自动配置系统代理):
./wechat-proxy
-
配置浏览器代理:
- 设置HTTP代理为
127.0.0.1:8888 - 或设置系统代理
- 设置HTTP代理为
-
访问微信公众号:
- 打开微信网页版或微信公众号页面
- 访问目标公众号的文章列表
-
自动抓取:
- 代理会自动检测文章列表请求
- 抓取文章内容并转换为Markdown
- 保存到指定的输出目录
文章将以Markdown格式保存,包含以下信息:
# 文章标题
**作者**: 作者名称
**发布时间**: 发布时间
**原文链接**: 原文URL
**抓取时间**: 抓取时间
---
文章内容(Markdown格式)wechat_articles/
├── 2024-01-01/
│ ├── 143022_文章标题1.md
│ └── 153045_文章标题2.md
└── 2024-01-02/
└── 092015_文章标题3.md
代理会自动监听以下类型的请求:
-
公众号文章列表:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=... -
具体文章页面:
https://mp.weixin.qq.com/s?...
- 确保已安装Go 1.23.4或更高版本
- 代理需要监听端口,确保端口未被占用
- 文章抓取需要网络连接
- 遵守相关法律法规和网站服务条款
-install-cert
安装根证书到系统(需要管理员权限)
-uninstall-cert
卸载根证书(需要管理员权限)
-auto-proxy
自动配置系统代理(需要管理员权限)
-no-cert
禁用证书管理(仅支持HTTP)
-config string
配置文件路径 (默认 "config.json")
-dev string
网络设备(主要用于macOS)
-no-system-proxy
禁用系统代理配置
-output string
文章输出目录 (默认 "./wechat_articles")
-port int
代理监听端口 (默认 8888)
- Windows管理员权限:使用管理员身份运行程序
- macOS networksetup错误:确保系统有networksetup命令
- Linux桌面环境:检查是否安装了gsettings或kwriteconfig5
- 代理配置失败:使用
-no-system-proxy参数禁用自动配置,手动设置浏览器代理
- 端口被占用:修改配置文件或使用
-port参数指定其他端口 - 无法抓取内容:检查网络连接和代理设置
- 权限问题:确保有写入输出目录的权限
- goproxy - HTTP代理库
- resty - HTTP客户端
- fatih/color - 终端颜色输出
- 自定义HTML转Markdown转换器
本项目参考了 wx_channels_download 项目的系统代理配置实现,采用跨平台方案:
- Windows: 通过注册表修改系统代理设置
- macOS: 使用
networksetup命令配置网络代理 - Linux: 自动检测桌面环境,使用
gsettings(GNOME) 或kwriteconfig5(KDE)
- 自动权限检查和错误提示
- 信号处理确保程序退出时恢复代理设置
- 平台特定的实现优化
- 优雅的错误处理和用户提示
sysproxy.go # 系统代理管理器接口定义
sysproxy_darwin.go # macOS实现(使用 networksetup)
sysproxy_windows.go # Windows实现(使用注册表)
sysproxy_linux.go # Linux实现(支持GNOME/KDE)
参考 wx_channels_download 的设计模式:
- HTTP代理监听: 使用
goproxy库创建代理服务器 - 请求拦截: 识别微信公众号相关请求
- 内容提取: 从响应中提取文章信息
- 后续处理: 使用
resty直接抓取文章内容
- 自动恢复系统代理设置
- 信号处理确保优雅退出
- 权限检查和用户提示
- 错误处理和日志记录
本项目仅供学习和研究使用,请遵守相关法律法规和网站服务条款。