只需十几行代码,轻松爬取公众号文章!

最近关注了几个公众号,想收藏有价值的内容。不过文章较多,不停的下滑操作去找文章是一件折磨人的事,试过几次后,面对众多的资源望洋兴叹。

有什么好的方法呢?有人推荐连接手机用fiddler抓包,被坑了2个小时😡,此路不通或者说麻烦。

一个比较好的方法是找到微信公众号平台内部的API,比如“python技术”的的文章这里都有,哈哈:

为了获取文章列表,我特意注册了一个微信公众号。

注册好了,咱们直奔主题,说下操作过程。

进入公众号点击<草稿箱>,再点击右侧<图文模板> ![](http://www.justdopython.com/assets/images/2022/11/scrapywechatmp/2.png) 选择<新建图文模板> ![](http://www.justdopython.com/assets/images/2022/11/scrapywechatmp/3.png) 进入到编辑界面,点<超链接>,选<选择其他公众号>,输入你要爬的公众号名称。 ![](http://www.justdopython.com/assets/images/2022/11/scrapywechatmp/4.png) ![](http://www.justdopython.com/assets/images/2022/11/scrapywechatmp/5.png) 以python技术为例: ![](http://www.justdopython.com/assets/images/2022/11/scrapywechatmp/6.png) 按F12或通过鼠标右键检查,点《Network》后选择《XHR》一般最后一个即是当前页面内容所在,这里看到url和标题分别位于《link》和《title》标签下,如果network没东西刷新试一下

下图最后一个箭头的title标签,可以看到我昨天发表的“用LOL英雄点缀你的博客”

到这里我们已经成功了一半,接下来我们获取用到的《user-agent》《URL》《cooike》《tooken》和《fakeid》,点击Headers

  • cooike帮我们绕过登录过程
  • fakeid是目标公众号的唯一标识符
  • user-agent可以模拟浏览器请求 至此信息获取部分完成,下面开始开始代码部分。

注意: 下面“完整脚本”中的fakeid、token、type等的值在url中可以看到 也可以直接访问这个url,一个JSON格式的数据:

完整脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# -*- coding: utf-8 -*-
import requests
import time

headers = {
    "cookie": "appmsglist_action_3889613222=card; ua_id=Q1Dfu2THA6T9Qr1HAAAAAN_KYa5xTwNmiuqj1Mkl6PY=; wxuin=18828715020059xid=a5c7612f529374b74deb4178e7ff4ca7",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
url = 'https://mp.weixin.qq.com/cgi-bin/appmsg'
fad = 'MjM5ODM3MTUwMA=='                     #爬不同公众号只需要更改 fakeid

def page(num=1):                             #要请求的文章页数
    title = []
    link = []
    for i in range(num):         
        data = {
            'action': 'list_ex',
            'begin': i*5,       #页数
            'count': '5',
            'fakeid': fad,
            'type': '9',
            'query':'' ,
            'token': '1753262244',
            'lang': 'zh_CN',
            'f': 'json',
            'ajax': '1',
        }
        r = requests.get(url,headers = headers,params=data)
        dic = r.json()            
        for i in dic['app_msg_list']:     #遍历dic['app_msg_list']中所有内容
            title.append(i['title'])      #取 key键 为‘title’的 value值
            link.append(i['link'])        #去 key键 为‘link’的 value值
    return title,link

if __name__ == '__main__':
    (tle,lik) = page(5)
    for x,y in zip(tle,lik):
        print(x,y)

成功获取5页url和标题,可以看到我发表过的几篇文章😀,以后查公众号文章就方便了,bingo!

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。