基于微信公众号API的微信公众号爬虫

Keywords: #cs #python

爬取微信公众号文章网上有两种思路,一种是基于搜狗搜索,但是这种我发现有个问题,因为它是根据搜索词的,所以你没办法指定搜索的结果只是某个公众号的,而且更大的问题是,它不是按时间排序的,所以你如果是想爬最新的就会很麻烦。而基于微信公众号API的方式就很好弥补了这种缺陷,但是它同时有一个问题,就是它需要的东西有一定门槛,对于没有计算机基础知识的人来说使用起来比较麻烦。

前期准备

  1. 登录微信公众号
  2. 在新建一个文本的时候,点击超链接选项,
  3. 打开F12进入调试模式, 弹出的东西叫工作台。
  4. 在弹出页面中账号选择其他账号,输入想查询的公众号,点击查询后,会出现这个公众号近期的文章。
  5. 在工作台上面找到network或者网络,点击Fetch/XHR询找一个名字开头appmsgpublish的文件,然后点开。
  6. 在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你可以再去爬点赞数这些具体数值。