基于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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python爬虫代理IP池实现方法
Jan 05 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
python可视化爬虫界面之天气查询
Jul 03 Python
python通过http下载文件的方法详解
Jul 26 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
python中有函数重载吗
May 28 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 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 MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
js实现碰撞检测
2021/01/29 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
让 python 命令行也可以自动补全
2014/11/30 Python
python静态方法实例
2015/01/14 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
教师个人的自我评价分享
2014/01/02 职场文书
区三好学生主要事迹
2014/01/30 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
求职推荐信范文
2015/03/27 职场文书
赞助商致辞
2015/07/30 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS