基于Python采集爬取微信公众号历史数据


Posted in Python onNovember 27, 2020

鲲之鹏的技术人员将在本文介绍一种通过模拟操作微信App的方式采集指定公众号的所有历史数据的方法。

通过我们抓包分析发现,微信公众号的历史数据是通过HTTP协议加载的,对应的API接口如下图所示,其中有四个关键参数(__biz、appmsg_token、pass_ticket以及Cookie)。

基于Python采集爬取微信公众号历史数据

为了能够拿到这四个参数,我们需要模拟操作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. 点击"全部消息"

基于Python采集爬取微信公众号历史数据

基于Python采集爬取微信公众号历史数据

此时,我们可以从https://mp.weixin.qq.com/mp/profile_ext?action=home的应答数据中捕获__biz、appmsg_token以及pass_ticket三个关键参数,以及请求头中的Cookie值。如下图所示。

基于Python采集爬取微信公众号历史数据

基于Python采集爬取微信公众号历史数据

基于Python采集爬取微信公众号历史数据

有了上述四个参数,我们就可以构造出获取历史文章列表的API请求,通过调用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)

以"数字工厂"这个微信公众号为例,采集过程运行截图如下所示:

基于Python采集爬取微信公众号历史数据

输出结果截图如下所示:

基于Python采集爬取微信公众号历史数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
Python的Urllib库的基本使用教程
Apr 30 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
Python安装Flask环境及简单应用示例
May 03 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
Python中join()函数多种操作代码实例
Jan 13 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 #Python
Python基于execjs运行js过程解析
Nov 27 #Python
celery在python爬虫中定时操作实例讲解
Nov 27 #Python
python输出国际象棋棋盘的实例分享
Nov 26 #Python
Django多个app urls配置代码实例
Nov 26 #Python
python Xpath语法的使用
Nov 26 #Python
python模拟点击玩游戏的实例讲解
Nov 26 #Python
You might like
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
经典c++面试题四
2015/05/14 面试题
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
班主任工作实习计划
2015/01/16 职场文书
年度考核表个人总结
2015/03/06 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
python中if和elif的区别介绍
2021/11/07 Python