collect-app-msg.md 2.2 KB

collect-app-msg.py 使用说明

用于抓取微信“小程序话题”下的公众号文章(贴图),并以 JSON 结构输出。

环境要求

  • Python 3.10+(已在 Windows + Python 3.13 环境验证)
  • 网络可访问 mp.weixin.qq.com ,不能在常见云服务商静态IP环境下运行,会触发验证码验证, 请在自己电脑上登陆过自己微信的情况下运行。

安装依赖

pwsh -NoProfile -Command "python -m pip install -U requests playwright; python -m playwright install chromium"

运行

pwsh -NoProfile -Command "python ./collect-app-msg.py --topic '#乡源文化挖掘' --out data.json"

常用参数:

  • --topic必填。话题名称,例如 #乡源文化挖掘
  • --out:输出文件名,默认 data.json
  • --max-pages:最多抓取页数,默认 10<=0 表示不限制)
  • --sleep:每条之间延迟秒数,默认 0.3

示例(只抓 1 页):

pwsh -NoProfile -Command "python ./collect-app-msg.py --topic '#乡源文化挖掘' --max-pages 1 "

输出格式

输出文件:默认为 data.json 在同名目录下,是一个 JSON 数组,每条为文章结构:

[
  {
    "outlinkId": 2247483702,
    "userId": 0,
    "url": "https://mp.weixin.qq.com/s?...",
    "title": "标题",
    "images": ["https://.../0?wx_fmt=jpeg"],
    "content": "<a class=\"wx_topic_link\" ...>...</a>\n"
  }
]

字段说明:

  • outlinkId:微信官方文章的 msgid(用于去重)
  • userId:从乡源小程序传入的用户ID,如果不是从小程序发出来的则为 0
  • images:图片
  • content:详情数据

增量抓取与去重规则

脚本会在抓取前读取 --out 指定的 JSON:

  • 判重键:优先使用 outlinkId;缺失时使用 url
  • 跳过详情页请求:若 getTopicList 返回的某条文章已存在于历史 JSON 中,则不会再打开详情页
  • 终止翻页:如果某一页 getTopicList 的所有条目都已存在(本页没有任何新条目),则停止请求下一页
  • 保存顺序:写回 JSON 时,本次新抓到的条目会放在最上面
  • 合并去重:写回时仍会去重,且 新数据优先(同一 outlinkId/url 时保留新条目)