基于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标准库之循环器(itertools)介绍
Nov 25 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
python实现人脸识别代码
Nov 08 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
Python中socket网络通信是干嘛的
May 27 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
python 下载m3u8视频的示例代码
Nov 11 Python
Python图片检索之以图搜图
May 31 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python hook监听事件详解
2018/10/25 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Python如何将模块打包并发布
2020/08/30 Python
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
会计自我鉴定
2014/02/04 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
Python中for后接else的语法使用
2021/05/18 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python
Python内置数据类型中的集合详解
2022/03/18 Python