# collect-app-msg.py 使用说明 用于抓取微信“小程序话题”下的公众号文章(贴图),并以 JSON 结构输出。 ## 环境要求 - Python 3.10+(已在 Windows + Python 3.13 环境验证) - 网络可访问 `mp.weixin.qq.com` ,不能在常见云服务商静态IP环境下运行,会触发验证码验证, 请在自己电脑上登陆过自己微信的情况下运行。 ## 安装依赖 ```bash pwsh -NoProfile -Command "python -m pip install -U requests playwright; python -m playwright install chromium" ``` ## 运行 ```bash pwsh -NoProfile -Command "python ./collect-app-msg.py --topic '#乡源文化挖掘' --out data.json" ``` 常用参数: - `--topic`:**必填**。话题名称,例如 `#乡源文化挖掘` - `--out`:输出文件名,默认 `data.json` - `--max-pages`:最多抓取页数,默认 `10`(`<=0` 表示不限制) - `--sleep`:每条之间延迟秒数,默认 `0.3` 示例(只抓 1 页): ```bash pwsh -NoProfile -Command "python ./collect-app-msg.py --topic '#乡源文化挖掘' --max-pages 1 " ``` ## 输出格式 输出文件:默认为 data.json 在同名目录下,是一个 JSON 数组,每条为文章结构: ```json [ { "outlinkId": 2247483702, "userId": 0, "url": "https://mp.weixin.qq.com/s?...", "title": "标题", "images": ["https://.../0?wx_fmt=jpeg"], "content": "...\n" } ] ``` 字段说明: - `outlinkId`:微信官方文章的 `msgid`(用于去重) - `userId`:从乡源小程序传入的用户ID,如果不是从小程序发出来的则为 `0` - `images`:图片 - `content`:详情数据 ## 增量抓取与去重规则 脚本会在抓取前读取 `--out` 指定的 JSON: - **判重键**:优先使用 `outlinkId`;缺失时使用 `url` - **跳过详情页请求**:若 `getTopicList` 返回的某条文章已存在于历史 JSON 中,则不会再打开详情页 - **终止翻页**:如果某一页 `getTopicList` 的所有条目都已存在(本页没有任何新条目),则停止请求下一页 - **保存顺序**:写回 JSON 时,**本次新抓到的条目会放在最上面** - **合并去重**:写回时仍会去重,且 **新数据优先**(同一 `outlinkId/url` 时保留新条目)