尝试一下抓取微信公众号历史文章。
采集的主要信息有:标题、描述、作者、评论数、阅读数、在看数、发布时间、文章链接
主要有这几个步骤: 需要准备工具:fiddler
微信PC客户端
使用python3,相应环境自己搭建。
分析流程:首先,打开fiddler,操作一下自己的微信,访问一些公众号,然后看一下请求,这里我访问菜鸟教程的历史文章,界面如下
在fiddler里面找到微信相关的请求。如下
如果请求太多,可以设置过滤“mp.weixin.qq.com”,就可以只看微信这边过来的请求了。
我们将上面发现的几个请求每个都看一遍,可以发现在第二个请求“/mp/profile_ext?action=home...”里面有一些数据
可以看到这个就是上面截图中的页面,里面有个\'msgList\'的js变量,存的貌似是页面内容的json。
也就是说我们请求到这个页面就可以获取这个文章列表了。
**注意到TextView这个tab的时候可能会告诉你页面没有解码,点击解码就可以了。
到现在是不是就可以着手开发代码了?别慌。
我们只知道这个页面有数据,但还不知道怎么下一页的数据怎么获取,先将界面上的文章拉到第二页看一下。(这个时候需要先关注公众号)
我们可以看到第二页相同链接的请求已经变成了json。
json数据,比解析网页似乎要方便许多。
分析请求:看一下找到的这个请求的具体内容。
通过观察,我们可以知道这是一个get请求,通过研究,摸清了一些参数的含义,如下:
**一般不懂的参数可以试试不要,或者直接写死,很多情况是可以采集到数据的。
接下来写代码。
# encoding=utf-8 # date: 2019/4/26 __author__ = "Masako" import json import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) headers = { \'Host\': \'mp.weixin.qq.com\', \'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400\', \'X-Requested-With\': \'XMLHttpRequest\', } biz = \'MzA5NDIzNzY1OQ==\' # 公众号id uin = \'MjM4NTIzNzQ5MQ==\' # 用户id key = \'08039a5457341b11f0c0b7e68e3cda9f6cbf593f925e8716293a13998bece633ea775eeb0159\' \ \'a1183ca88d27b3060f6fc2c3428ef633f851029a64fa0638e41d111e13dce78055e01a39d3d0fdd2f657\' # 是个变量 pass_ticket = \'dKBE2K1SSAJHmrnd8fMJpWD6j52ASjpQfBiMjm74DyZd1Y7TsoOD/25GgM80trTX\' # 似乎用处不大 offset = 0 pagesize = 10 proxies = { \'https\': \'218.86.87.171:53281\' } url = "https://mp.weixin.qq.com/mp/profile_ext" params = { "action": "getmsg", "__biz": biz, "f": "json", "offset": offset, "count": pagesize, "is_ok": 1, "scene": 124, "uin": uin, "key": key, "pass_ticket": pass_ticket, "wxtoken": "", # "appmsg_token": appmsg_token, } response = requests.get(url, params=params, headers=headers, proxies=proxies, verify=False) print(response.text)