基于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 相关文章推荐
Django的数据模型访问多对多键值的方法
Jul 21 Python
打包发布Python模块的方法详解
Sep 18 Python
Python及PyCharm下载与安装教程
Nov 18 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
零基础学python应该从哪里入手
Aug 11 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
浅谈Python数学建模之数据导入
Jun 23 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
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php session的锁和并发
2016/01/22 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
列表内容的选择
2006/06/30 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
巧用canvas
2017/01/21 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python中的下划线详解
2015/06/24 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
pycharm导入源码的具体步骤
2020/08/04 Python
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
外企测试工程师面试题
2015/02/01 面试题
5.1手机促销活动
2014/01/17 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
烹调加工管理制度
2014/02/04 职场文书
立案决定书范文
2015/06/24 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers