基于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备份文件以及mysql数据库的脚本代码
Jun 10 Python
python读取浮点数和读取文本文件示例
May 06 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
pandas 层次化索引的实现方法
Jul 06 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
python学生信息管理系统实现代码
Dec 17 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
python实现发送邮件
Mar 02 Python
django使用多个数据库的方法实例
Mar 04 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
国内咖啡文化
2021/03/03 咖啡文化
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
Python实现提取文章摘要的方法
2015/04/21 Python
理解python正则表达式
2016/01/15 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
销售实习自我鉴定
2013/12/07 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
加拿大留学自荐信
2014/01/28 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
大学生操行评语大全
2014/12/31 职场文书
采购员岗位职责
2015/02/03 职场文书
小升初自荐信范文
2015/03/05 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Python上下文管理器Content Manager
2021/06/26 Python