newsreport_agent_for_traffic/WECHAT_CRAWLER_GUIDE.md

154 lines
3.6 KiB
Markdown
Raw Normal View History

2026-05-09 10:46:52 +08:00
# 微信公众号抓取指南
## 当前项目中的两条公众号数据链路
项目里当前同时存在两种公众号处理方式:
1. 官方接口抓取链路
2. 微信公众平台后台登录态探测链路
它们用途不同,不要混用理解。
## 1. 官方接口抓取链路
### 对应文件
- `crawler/wechat_crawler.py`:高德地图公众号
- `crawler/baidu_map_crawler.py`:百度地图公众号
- `crawler/wechat_mp_crawler_base.py`:通用基类
### 这条链路的特点
-`main.py` 正式集成
- 依赖 `AppID/AppSecret`
- 通过微信官方素材接口和草稿接口获取内容
- 可直接进入统一向量库流程
### 环境变量
```env
WECHAT_APPID=...
WECHAT_APPSECRET=...
BAIDU_MAP_APPID=...
BAIDU_MAP_APPSECRET=...
```
### 当前抓取逻辑
1. 先取 `access_token`
2. 读取永久图文素材数量
3. 如果永久素材为空,回退读取草稿箱
4. 解析图文内容
5. 根据关键词过滤
6. 保存为 JSON
7. 如果通过 `crawl_and_save(..., save_to_rag=True)` 调用,则写入向量库
### 直接运行示例
```bash
python crawler/wechat_crawler.py
python crawler/baidu_map_crawler.py
```
### 通过主流程运行
```bash
python main.py --mode crawl --sources wechat
python main.py --mode crawl --sources baidu
python main.py --mode full --sources wechat,baidu
```
### 数据结构
官方接口解析后的文章字段包括:
```json
{
"title": "文章标题",
"author": "作者",
"digest": "摘要",
"content": "正文纯文本",
"content_html": "正文HTML",
"content_source_url": "原文地址",
"thumb_url": "封面图地址",
"url": "微信文章URL",
"date": "2026-04-29",
"update_time": "2026-04-29 10:00:00",
"timestamp": 1777428000,
"source": "高德地图公众号",
"crawl_time": "2026-04-29 10:05:00"
}
```
## 2. 后台登录态探测链路
### 对应文件
- `crawler/wechat_mp_backend_client.py`
### 这条链路的用途
- 用公众号后台登录 Cookie 做验证和排查
- 可搜索公众号账号、列文章、尝试抓正文
- 适合测试“高德地图官方号 / 百度地图官方号”是否能拿到有效文章
- 默认不被 `main.py` 调用
### 需要的条件
- 有效的 `WECHAT_MP_COOKIE`
- 可用的微信公众号后台登录态
- 抓正文时需要本机 Edge + Selenium
### 示例
```bash
python -m crawler.wechat_mp_backend_client --biz-query AMap --count 5 --fetch-content
```
## IP 白名单说明
如果走的是“官方接口抓取链路”,可能遇到微信 IP 白名单限制;见:
- [WECHAT_IP_WHITELIST_GUIDE.md](WECHAT_IP_WHITELIST_GUIDE.md)
如果走的是“后台登录态探测链路”,它依赖的是 Cookie 和后台权限,不走 `AppID/AppSecret` 白名单流程。
## 当前项目中的实际边界
- `main.py` 当前只接入官方接口抓取链路
- 后台登录态探测工具主要用于验证真实公众号文章能否访问
- “探测成功”不等于“主流程已改为走后台链路”
## 常见问题
### 配置了公众号数据源但被跳过
检查:
- `WECHAT_APPID` / `WECHAT_APPSECRET`
- `BAIDU_MAP_APPID` / `BAIDU_MAP_APPSECRET`
### access_token 获取失败
优先检查:
1. AppID 和 AppSecret 是否正确
2. IP 是否在白名单
3. 公众号是否具备接口权限
### 探测工具能拿到文章,但主流程抓不到
这是正常现象,说明:
- 后台登录态探测链路可用
-`main.py` 仍在走官方接口链路
## 已删除的旧说明
以下说法不再准确:
- 当前项目只有一种公众号抓取方式
- 所有“高德 / 百度”测试结果都来自官方接口
- 后台登录态探测工具已经接入 `main.py`