精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的

开发工具python版本 : 3.6.4相关模块:pdfkit模块;requests模块;以及一些Python自带的模块 。 抓包工具: fiddler
环境搭建

  1. python 环境安装Python并添加到环境变量 , pip安装需要的相关模块即可 。
  2. fiddler 环境去官网下载最新版本的安装包直接安装 。 fiddler官网
原理简介首先 , 我们打开fiddler这个抓包软件 , 其界面如下:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的然后 , 我们设置一下过滤规则以过滤掉没用的数据包 , 因为我们只想抓取微信相关的数据包而已 , 而不想其他没用的数据包干扰我们的分析 , 就像这样:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的接着我们在电脑端登录微信 , 并随便找个公众号 , 查看它的历史文章列表 。 就像这样:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的不断滚动鼠标滚轮 , 以查看该公众号更多的历史文章数据 。 此时 , 我们可以在fiddler里看到出现了类似如下图所示的情况:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的显然 , 红框里的https请求应该就是获得该微信公众号发的文章相关的数据的请求了 。 现在 , 我们来分析一下这个请求 。 显然 , 该请求的链接地址构成为:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的接着看看请求头 , 请求头的话在这能看到:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的感觉有个user-agent就足够了:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1295.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat'}123【精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的】接着看看cookies , 在这(应该直接复制到代码里就行了):
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的最后 , 再看看发送这个请求需要携带哪些参数吧 , 在这:
精英联盟总队|带大家写一波微信公众号的爬取!谁说微信爬不了的即:
action__bizfoffsetcountis_oksceneuinkeypass_ticketwxtokenappmsg_tokenx5
经过测试 , 我们可以发现如下参数是可以固定的:
actionfis_oksceneuinkeywxtokenx5
其他参数的含义我们则可以根据经验和简单的测试进行判断:
1.offset控制翻页的偏移量参数2.count每页的文章数量3.__biz公众号标识, 不同的__biz对应不同的公众号4.pass_ticket应该是微信登录之后返回的参数吧,去年尝试模拟登录微信网页版的时候看到返回的参数里就好像有它,但是现在微信网页版已经被官方封了T_T 。 5.appmsg_token应该也是微信登录之后的一个标识参数吧, 而且和阅读的微信公众号有关 , 查看不同的微信公众号时该值也是不同的 。


推荐阅读