Python模拟微信App操作抓取公众号历史文章数据
本文介绍利用Python模拟安卓微信App操作,通过抓包获取__biz、appmsg_token等关键参数,进而构造HTTP请求直接调用API接口,实现指定公众号历史文章数据的批量采集。
微信公众号历史数据采集方案概述
本文由鲲之鹏技术人员撰写,旨在分享一种通过模拟微信App操作来采集指定公众号全部历史数据的技术方案。
API接口分析与关键参数识别
经抓包分析确认,微信公众号的历史数据加载依赖于HTTP协议,其对应的API接口如所示。该接口包含四个关键参数:__biz、appmsg_token、pass_ticket以及Cookie。

模拟App操作与抓包技术基础
获取上述四个参数需通过模拟App操作生成,随后进行抓包捕获。此前我们曾介绍过利用Python模拟安卓App的方法(详见http://www.site-digger.com/html/articles/20180912/664.html),以及使用Mitmproxy进行HTTP集成抓包的技术(详见http://www.site-digger.com/html/articles/20181109/682.html)。
模拟微信操作步骤详解
模拟操作微信需执行以下步骤:
1. 启动微信App
2. 点击"通讯录"
3. 点击"公众号"
4. 点击目标采集公众号
5. 点击右上角用户图像图标
6. 点击"全部消息"


关键参数获取与API请求构造
此时,可从https://mp.weixin.qq.com/mp/profile_ext?action=home的响应数据中捕获__biz、appmsg_token及pass_ticket三个关键参数,同时从请求头中获取Cookie值,具体如所示。



获得上述四个参数后,即可构造获取历史文章列表的API请求,直接调用接口获取数据(无需继续模拟App操作)。核心参数如所示,通过调整offset参数即可获取所有历史数据。
# Cookie
headers = {'Cookie': 'rewardsn=; wxtokenkey=777; wxuin=584068438; devicetype=android-19; version=26060736; lang=zh_CN; pass_ticket=Rr8cO5c2******3tKGqe7aVZzV9TupvrK+1uHHmHYQGL2WFdKIE; wap_sid2=COKhxu4KElxckFZQ3QzTHU4WThEUk0zcWdrZjhGcUdYdEVSV3Y1X2NPWHNUakRrd1ZzMnpLTERpdE5rbmxjSTg******dlRBcUNRazZpOGxTZUVEQUTgNQJVO'}
url = 'https://mp.weixin.qq.com/mp/profile_ext?'
data = {}
data['is_ok'] = '1'
data['count'] = '10'
data['wxtoken'] = ''
data['f'] = 'json'
data['scene'] = '124'
data['uin'] = '777'
data['key'] = '777'
data['offset'] = '0'
data['action'] = 'getmsg'
data['x5'] = '0'
# 下面三个参数需要替换
# https://mp.weixin.qq.com/mp/profile_ext?action=home应答数据里会暴漏这三个参数
data['__biz'] = 'MjM5MzQyOTM1OQ=='
data['appmsg_token'] = '993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~'
data['pass_ticket'] = 'Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE'
url = url + urllib.urlencode(data)
实际采集案例演示
以"数字工厂"微信公众号为例,采集过程运行截图如所示。

输出结果截图如所示。

以上为本文全部内容,希望对各位学习有所帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









