一个功能完整的微信公众号文章爬取工具,支持自动登录、公众号搜索、文章列表获取、内容下载和数据处理。
- 🔐 自动登录: 支持二维码扫码登录,自动管理会话状态
- 🔍 智能搜索: 公众号模糊搜索,相似度排序
- 📊 数据处理: 自动解析文章数据,生成CSV和Markdown文件
- 📝 内容下载: 批量下载文章内容,支持断点续传
- 🛡️ 稳定可靠: 完善的错误处理和重试机制
- 📋 日志记录: 详细的操作日志,便于问题排查
- 📚 合集管理: 发现、管理和处理特定合集
wechat_articles_crawl/
├── src/ # 源代码目录
│ ├── utils/ # 工具模块
│ │ ├── logger.py # 日志工具
│ │ └── file_utils.py # 文件操作工具
│ ├── wechat_login.py # 微信登录管理
│ ├── account_manager.py # 公众号管理
│ ├── article_crawler.py # 文章爬取
│ ├── data_processor.py # 数据处理
│ └── config.py # 配置管理
├── main.py # 主程序入口
├── config.yaml # 配置文件
├── requirements.txt # 依赖文件
└── README.md # 项目说明
- Python 3.7+
- Chrome 浏览器
- Windows/Linux/macOS
-
克隆项目
git clone <repository-url> cd wechat_articles_crawl
-
安装依赖
python -m venv myenv .\myenv\Scripts\activate pip install -r requirements.txt
-
配置设置 编辑
config.yaml
文件,根据需要调整配置参数。
在项目根目录下执行:
python main.py
程序将以交互式菜单的形式运行,请根据提示选择要执行的操作。
程序提供5个主要操作,请务必理解它们的功能和顺序。
- 作用:扫码登录微信公众平台,然后搜索并选择一个要爬取的公众号。
- 输出:在
./credential/
目录生成包含登录凭证和公众号信息的配置文件。 - 说明:首次使用或更换公众号时必须执行此操作。
- 作用:从微信公众平台获取文章列表的原始JSON数据。
- 输出:在
./data/{公众号名}/raw_data/
目录生成JSON文件。 - 说明:此操作具备避免重复爬取的功能,但依赖操作3生成的
latest_articles.csv
文件。
- 作用:解析操作2下载的JSON数据,提取关键信息,生成结构化的CSV文件。
- 输出:
./data/{公众号名}/csv_data/{年月}.csv
:按年月分组的文章数据。./data/{公众号名}/csv_data/latest_articles.csv
:用于避免重复爬取的关键文件。
- 说明:此步骤是避免重复爬取的核心。CSV文件中“是否爬取”字段默认为“0”。
- 作用:根据CSV文件中的记录,下载文章的Markdown原文。
- 输出:在
./data/{公众号名}/md_data/
目录生成Markdown文件。 - 筛选逻辑:默认只下载CSV文件中“是否爬取”字段为“0”的文章。
- 作用:发现、查看和处理公众号内的文章合集。
- 输出:在
./data/{公众号名}/album_data/
目录生成合集相关的CSV和Markdown文件,并维护一个album_status.json
状态文件。 - 说明:这是一个独立的增量更新模块,适合针对性地爬取系列文章。
正确的操作顺序是保证程序功能正常的关键。
首次使用流程:
操作1 → 操作2 → 操作3 → 操作4/5
↓ ↓ ↓ ↓
配置 爬取全部 生成CSV 按需下载
公众号 原始数据 +latest文件
后续使用流程:
操作2 → 操作3 → 操作4/5
↓ ↓ ↓
智能增量 更新CSV 下载新内容
爬取 +latest文件
⚠️ 避免重复爬取的关键:操作2的避免重复功能,完全依赖于操作3生成的latest_articles.csv
文件。⚠️ 首次必须执行操作3:在首次使用时,必须按操作2 -> 操作3
的顺序执行一次。此后,操作2才具备了增量爬取(避免重复)的能力。⚠️ 切勿跳过操作3:如果连续执行两次操作2而中间没有执行操作3,程序会因为没有更新latest_articles.csv
文件而导致重复爬取所有数据。
- 合法使用: 请遵守相关法律法规,仅用于学习和研究目的
- 频率控制: 程序已内置请求频率控制,请勿修改过于激进
- 账号安全: 建议使用专门的测试账号,避免影响主账号
- 数据备份: 重要数据请及时备份
Q: 登录失败怎么办? A: 检查网络连接,确保能正常访问微信公众平台,清除浏览器缓存后重试。
Q: 爬取速度很慢?
A: 可以适当调整 config.yaml
中的 delay
参数,但不建议设置过小。
Q: 程序中断后如何继续? A: 程序支持断点续传,重新运行即可从上次中断的地方继续。
Q: 为什么操作2一直重复爬取相同数据?
A: 这是因为还没有执行操作3生成latest_articles.csv
文件。操作2的避免重复功能依赖于此文件,请按照正确顺序执行:操作2→操作3→操作2(后续)。
Q: latest_articles.csv文件在哪里生成?
A: latest_articles.csv
文件在**操作3(处理文章列表数据)**中生成,保存在./data/{公众号名}/csv_data/
目录下。此文件记录最新文章信息,用于操作2的避免重复爬取功能。
Q: 可以跳过某个操作吗? A: 不建议跳过操作。正确的执行顺序是:
- 首次使用:操作1→操作2→操作3→操作4
- 后续使用:操作2→操作3→操作4 跳过操作可能导致功能异常或数据重复。
Q: 操作4显示"没有需要处理的CSV文件"? A: 请检查:
- 是否已执行操作3生成CSV文件
- CSV文件中"是否爬取"字段是否为"0"(数字零)
- 文件路径是否正确:
./data/{公众号名}/csv_data/
项目采用面向对象设计,主要类包括:
WeChatMPLogin
: 处理微信登录和会话管理AccountManager
: 管理公众号搜索和选择ArticleCrawler
: 负责文章内容爬取DataProcessor
: 处理数据解析和存储
如需添加新功能,建议:
- 在对应的类中添加方法
- 更新配置文件支持新参数
- 添加相应的日志记录
- 更新文档说明
我们非常欢迎任何形式的贡献!无论是报告BUG、提出功能建议还是提交代码。
- 如果您发现了问题,请随时在 Issues 中提出。
- 如果您想贡献代码,请 Fork 本仓库,创建您的功能分支 (
git checkout -b feature/AmazingFeature
),然后提交 Pull Request。
感谢所有为本项目做出贡献的人!
本项目仅供学习和研究使用,请勿用于商业用途。