基于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相关的问题
Jun 30 Python
Python字符串匹配算法KMP实例
Jul 18 Python
Python网站验证码识别
Jan 25 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python实现关键词提取的示例讲解
Apr 28 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
python-numpy-指数分布实例详解
Dec 07 Python
opencv-python 读取图像并转换颜色空间实例
Dec 09 Python
django序列化serializers过程解析
Dec 14 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
python自动化八大定位元素讲解
Jul 09 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进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python 实现识别图片上的数字
2019/07/30 Python
Django实现分页显示效果
2019/10/31 Python
python绘制动态曲线教程
2020/02/24 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
我们的节日清明节活动总结
2014/04/30 职场文书
护士年终个人总结
2015/02/13 职场文书
2015教师节通讯稿
2015/07/20 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Django drf请求模块源码解析
2021/06/08 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript