基于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 相关文章推荐
Python实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python实现马耳可夫链算法实例分析
May 20 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
pytorch 预训练层的使用方法
Aug 20 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
Firefox div高度自适应
2009/04/28 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
Python复制目录结构脚本代码分享
2015/03/06 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
浅谈Python的文件类型
2016/05/30 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python 图像平移和旋转的实例
2019/01/10 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python getopt模块使用实例解析
2019/12/18 Python
Python实现图像的垂直投影示例
2020/01/17 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
pycharm导入源码的具体步骤
2020/08/04 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
毕业生自荐信的主要内容
2013/10/29 职场文书
学校十一活动方案
2014/02/01 职场文书
药品促销活动方案
2014/02/14 职场文书
有创意的广告词
2014/03/18 职场文书
2015高考寄语集锦
2015/02/27 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android