【Python爬虫】爬取微信公众号文章信息准备工作

有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来。参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一些心得。

整个研究过程如下:
1.了解微信公众号文章链接的组成,历史文章API组成,单个文章评论API组成,访问微信公众号的cookie组成;
2.分析历史文章API以及单个文章评论API的结构,构建爬虫进行爬取;
前面两点需要借助于抓包工具Fiddler,下面会详细介绍抓包结果的分析,上一篇文章有介绍“ Fiddler在PC/台式对Android进行抓包”
3.设计表结构,将爬虫获取的数据存入到mysql数据库;
4.对获取的数据库信息进行过滤整理,将相关内容输出,选择相应文章进行阅读并消化。

一、微信公众号图文消息的链接组成
微信公众帐号群发的图文消息一般情况下是在微信公众平台上编辑和产生的。
我们先从比较有名的公众号“逻辑思维”的图文消息看看一篇图文消息链接的组成元素:
逻辑思维有一篇每天60秒的文章【罗胖60秒:一个“智慧系统”是什么样的?】,在微信打开通过浏览器查看到链接
http://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec&chksm=90460ec6a73187d00ebc007b1429609573ca42b9ef1dd74d860b4716f04b63661b15cbee2c6b&mpshare=1&scene=23&srcid=1202m2DVBW8OubvaR1DcXF0a#rd
上面链接中的参数有__biz,mid,idx,sn,chksm,mpshare,scene和srcid
其实主要参数只有__biz,mid,idx和sn四个参数,而这四个参数能唯一确定一篇微信公众平台的图文消息,所以以下链接就可以访问文章
https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&mid=3009217237&idx=2&sn=881c0a758a43348e2e7602110862f6ec
这四个参数的含义是:
__biz可以认为是微信公众平台对外公布的公众帐号的唯一id,而这个__biz参数能用来生成公众帐号的二维码
mid是图文消息id,每篇文章这个消息id都唯一
idx是发布的第几条消息(1就代表是头条位置消息,2代表第二条)
sn是一个随机加密串(对于一篇图文消息是唯一的,如果你想问这个sn的生成规则是什么或者怎么破解,你基本上只能从微信公众平台开发团队才能得到答案)
另外,对于除了__biz之外的三个参数,mid/idx/sn 可以分别写成 appmsgid/itemidx/sign,比如还是之前文章,用如下链接一样可以访问到:
https://mp.weixin.qq.com/s?__biz=MjM5NjAxOTU4MA==&appmsgid=3009217237&itemidx=2&sign=881c0a758a43348e2e7602110862f6ec
其实在早期,只需要__biz, mid和idx三个参数即可确定一篇微信公众平台的图文消息,微信后来增加一个参数sn(sign),这样做的原因是:
微信公众平台的图文消息首先在后台保存为了一篇素材才能发布,而这个素材也会生成一个链接,在早期这个素材的链接就是后来要发布的文章的链接,而从上面这篇文章的链接你能猜出来,只需要改变mid(图文消息id)这个值,比如这篇文章的mid是10000382,对这个数字加上1或者2就极有可能是下一篇图文消息或者素材的链接,这样用户就有可能提前阅读到公众帐号已经写好并保存但还没群发的素材了。
所以分布文章时会加上一个随机生成的参数sn,确保文章无法被知道。


二、微信公众号历史文章API组成
在公众号主页,右上角有个人上半身图标,点击进入消息界面,下滑找到并点击“全部消息”,往下请求加载几次历史文章,然后回到Fiddler界面,不出意外的话应该可以看到这几次请求,可以看到返回的数据是json格式的,同时文章数据是以json字符串的形式定义在general_msg_list字段中:
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MjM5NjAxOTU4MA==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=pI3viTq3ke7q4XBuvPFfW04X1NN374CuTXRryqcWqIUGGXvrmHzytAth%2BMUWmDEv&wxtoken=&appmsg_token=985_CXzmkHn3e3dS9vsefAmdITS4irh69Rk351ye-w~~&x5=1&f=json


以下介绍几个主要参数:
- __biz:相当于是当前公众号的id(唯一固定标志) 
- offset:文章数据接口请求偏移量标志(从0开始),每次返回的json数据中会有下一次请求的offset,这里一般是按10递增的 
- count:每次请求的数据量(亲测最多可以是10) ,所以可以固定为10
- pass_ticket:可以理解是请求票据,而且隔一段时间后(大概几个小时)就会过期,失效后都需要重新抓包替换
- appmsg_token:同样理解为非固定有过期策略的票据,失效后都需要重新抓包替换

三、微信公众号访问的cookie组成:

访问微信公众号历史文章,我们是需要登录的,我们可以通过构建cookie去跳过登录过程
通过访问微信公众号文章,我们通过Fiddler抓包可以看到cookie的相关信息

其中pass_ticket和wap_sid2不是固定的,经常有变化,失效了都需要重新抓包,而其他wxtokenkey,wxuin,devicetype,version等只要微信号不变,登录设备不变都不会改变。

四、微信公众号单个文章评论API组成
通过访问微信公众号文章,我们抓包可以得到文章评论的API,这个返回的也是json格式,评论存储在elected_comment
https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&__biz=MjM5NjAxOTU4MA==&appmsgid=3009217642&idx=2&comment_id=578089232589930496&offset=0&limit=100&uin=777&key=777&pass_ticket=v+7PaoESYfMrxgXJpqOkfXV4Y2+gYNPPJfSSmzPXfeiuNrNiBeEcs+8b//Yit5sd&wxtoken=777&devicetype=android-26&clientversion=2607033b&appmsg_token=986_jbuKqpV9lCZ1cb787Tem5V5n6JKpU9TrOFUZRE5esVxnBK7IR-TsZiXLRNaO1tnfx4rkIk1xyFHRlqI7&x5=1&f=json

还是介绍一下其中的主要参数:
- __biz:和历史文章列表中一致,微信公众号ID
- comment_id:评论的id,一篇文章唯一
- appmsgid:图文消息ID,与文章有关(文章链接中的mid)
- pass_ticket:请求票据,同一时间段内历史文章API和单个文章评论API一致
- appmsg_token:非固定有过期策略的票据,同一时间段内历史文章API和单个文章评论API不一致
以上主要介绍了整个研究过程的第一点,下面将会分析历史文章API和单个文章评论API的返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js:堆栈和队列

JavaScript数组的栈和队列的操作方法。 堆栈和队列 要了解JavaScript数组的堆栈和队列方法的操作,需要先对堆栈和队列基础知识有所了解。在继续后面的内容之前,我们先简单的了解一下堆栈和队列的概念。 栈和队列都是动态的集合,在栈中&…

【Python爬虫】微信公众号历史文章和文章评论API分析

上一篇文章爬取微信公众号文章信息准备工作介绍了微信公众号历史文章和文章评论API的组成情况,历史文章API格式:https://mp.weixin.qq.com/mp/profile_ext?actiongetmsg&__bizMjM5NjAxOTU4MA&fjson&offset10&count10&is_ok1&sc…

【Python】Python简介和Python解释器

计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。 机器语言(二进制)→汇编语言→(前面两种语言是与硬件进行交互) →高级语言(面向过程语言(C语言)→面向对象语言&#xff09…

【Python】单线程异步多线程多进程实例

上一篇文章主要介绍了多任务场景下单线程异步、多线程、多进程如何选择,链接:多任务场景下单线程异步多线程多进程 这里主要通过三个实例去验证一下简单的多任务场景下,三种方式的耗时情况,假设有10个互不关联的10个任务 多进程版…

python及pycharm2018软件安装教程

python及pycharm2018软件安装教程 python 3.6.5及pycharm2018.1.1 Win版32/64位下载地址: https://pan.baidu.com/s/1KdECgnrARK4HubPeFSKCTw 密码:bwc5 Python及PyCharm简介: Python 是一种面向对象的解释型计算机程序设计语言。是纯粹的自由…

2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决

使用navicat 连接 mysql 8.0.11 报 "2059 - authentication plugin caching_sha2_password ..." 解决办法: 进入mysql命令行然后输入 ALTER USER root% IDENTIFIED WITH mysql_native_password BY root1;

【测试工具】在linux测试环境安装bug管理工具禅道

在我们测试中,为了方便管理测试流程,提交测试发现的bug,我们需要使用到bug管理工具。有些大公司可能会自己开发一些bug管理工具,但是我们也会用一些开源的bug管理工具,比如Bugzilla,Redmine,Tra…

【测试工具】在linux测试环境访问禅道数据库

上一篇文章我们介绍了如何在linux测试环境安装bug管理工具禅道,现在我们来介绍一下如何访问禅道的数据库,访问数据库有什么用呢?首先,我们可以更改我们安装后的管理系统的名称(改为自己公司名称)&#xff0…

在命令提示符(cmd)下怎样复制粘贴(详细版)

我们的命令提示符面板,不能选中复制。应该怎么办呢? 按照下面的方法即可解决 输入“cmd”,确认。 此时打开了cmd窗口,在图中位置右键选择“属性”。 4 在弹出的窗口中,勾选“快速编辑模式”。 5 复制方框1中的文字…

python各种库安装

1、安装django pip install django 安装成功测试:进入cmd--》输入python--》输入import django-->输入 django.get_version(),若正常显示则说明安装成功 2、更新pip python -m pip install --upgrade pip 3、安装pymysql pip install pymysql 出现错误&…

【工具】SecureCRT安装和注册

SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。 SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过…

Windows下如何查看某个端口被谁占用并强制关闭

一、查看那个端口被调用 我告诉大家一个方法,^_^。 1、 开始—->运行—->cmd,或者是windowR组合键,调出命令窗口; 2、输入命令:netstat -ano,列出所有端口的情况。在列表中我们观察被占用的端口&a…

【性能测试】性能测试的基础理论

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5456855.html ,有删减。 随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受…

MySQL 处理插入重主键唯一键重复值办法

本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下来就分别看看这三种方式的处理办法。 IGNORE 当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,…

【性能测试】性能测试的基本流程

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5463477.html,有删减。 本文主要介绍下性能测试的基本流程,性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,如下图: 下面分别介绍下每个…

【性能测试】性能测试工具选择

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5503134.html,有删减。 本篇文章主要简单总结下性能测试工具的原理以及如何选型。性能测试和功能测试不同,性能测试的执行是基本功能的重复和并发,需要模拟多用户&#xff0…

【测试工具】禅道项目管理工具设置触发邮箱

禅道支持邮件提醒,当需求、任务、bug等发生变化的时候,可以发邮件提醒。 禅道提醒邮件默认通知范围(禅道9.8版本,可以在 后台-消息-设置中设置哪些动作需要发信): 1、Bug:指派给抄送 添加&#…

【性能测试】Linux系统监控-Top命令

前面转载的三篇文章主要介绍了性能测试的相关概念,其中有提到服务器,服务器的配置是性能测试中必须考虑的,而且性能测试中也必须监控服务器。 这篇文章主要介绍一下如何通过Linux服务器自带的top命令监控运行情况,以下是直接top命…

【性能测试】Linux系统监控-CPU信息

我们知道CPU对于服务器来说非常重要,下面我们从几个方面介绍linux服务器CPU相关信息: 先要理解以下几个概念: 1、一台物理机的物理CPU的个数 2、一个CPU上的核数 3、一个核上面支持的线程数 有下面的计算公式: 总核数 物理C…

【Linux】Linux简介以及 与UNIX区别

一直以来对Linux、Unix、linux内核、linux发行版的概念比较模糊,最近查找资料并经过自己的整理,主要总结了Linux和UNIX的区别和联系、内核和操作系统的关系、Linux操作系统和结构、发行版本CentOS介绍。 Linux 和 UNIX 的关系/区别 Linux 是一个类似 U…