原创平台:鲲之鹏
原创文章链接:http://www.site-digger.com/html/articles/20190128/711.html
---------------------------------------------------------------------------------------------------------------------------------
在本文介绍一种通过模拟操作微信App的方式采集指定公众号的所有历史数据的方法。
通过我们抓包分析发现,微信公众号的历史数据是通过HTTP协议加载的,对应的API接口如下图所示,其中有四个关键参数(__biz、appmsg_token、pass_ticket以及Cookie)。
为了能够拿到这四个参数,我们需要模拟操作App,让其产生这些参数,然后我们再抓包获取。对于模拟App操作,前面我们曾介绍过通过Python模拟安卓App的方法(详见http://www.site-digger.com/html/articles/20180912/664.html)。对于HTTP集成抓包,前面我们曾介绍过Mitmproxy(详见http://www.site-digger.com/html/articles/20181109/682.html)。
我们需要模拟操作微信完成如下步骤:
1. 启动微信App
2. 点击"通讯录"
3. 点击"公众号"
4. 点击要采集的公众号
5. 点击右上角的用户图像图标
6. 点击"全部消息"
此时,我们可以从验证的应答数据中捕获__biz、appmsg_token以及pass_ticket三个关键参数,以及请求头中的Cookie值。如下图所示。
有了上述四个参数,我们就可以构造出获取历史文章列表的API请求,通过调用API接口直接获取数据(不需要再模拟App操作)。核心参数如下所示,通过改变offset参数,可以拿到所有历史数据。
以"数字工厂"这个微信公众号为例,采集过程运行截图如下所示:
输出结果截图如下所示:
附示例数据下载: