基于微信公众号API的微信公众号爬虫
爬取微信公众号文章网上有两种思路,一种是基于搜狗搜索,但是这种我发现有个问题,因为它是根据搜索词的,所以你没办法指定搜索的结果只是某个公众号的,而且更大的问题是,它不是按时间排序的,所以你如果是想爬最新的就会很麻烦。而基于微信公众号API的方式就很好弥补了这种缺陷,但是它同时有一个问题,就是它需要的东西有一定门槛,对于没有计算机基础知识的人来说使用起来比较麻烦。
前期准备
- 登录微信公众号
- 在新建一个文本的时候,点击超链接选项,
- 打开F12进入调试模式, 弹出的东西叫工作台。
- 在弹出页面中账号选择其他账号,输入想查询的公众号,点击查询后,会出现这个公众号近期的文章。
- 在工作台上面找到network或者网络,点击Fetch/XHR询找一个名字开头appmsgpublish的文件,然后点开。
- 在header找到一个叫cookie的字段,复制旁边的值;在payload里面找到fakeid和token
调用API
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"
cookie = "" # 你的cookie
fakeid = "" # 你想爬的公众号的fakeid
token = "" # 你获取的token
# 构造头文件,把之前获得到的cookie放进去
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=list&type=10&isMul=1&isNew=1&lang=zh_CN",
"Cookie": cookie,
"X-Requested-With": "XMLHttpRequest"
}
# 构造参数,把fakeid和token放进去
params = {
"token": token,
"lang": "zh_CN",
"f": "json",
"ajax": "1",
"action": "list_ex",
"begin": "0", # 如果想遍历,就以5为频数是调这个值
"count": "5",
"query": "",
"fakeid": fakeid, # 想查询的公众号
"type": "9",
}
# 调用
content_json = requests.post(url, headers=headers, params=params).json() # 调用完以后就可以得到对应公众号的文章
调用完以后,就可以通过遍历解析这个json,主要是拿到标题和url,拿到url你可以再去爬点赞数这些具体数值。