7

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

 1 year ago
source link: http://www.justdopython.com/2022/11/17/python-scrapywechatmp/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

2022-11-17

| python

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

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

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

1.png

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

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

进入公众号点击<草稿箱>,再点击右侧<图文模板> ![](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英雄点缀你的博客”

7.png

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

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

注意: 下面“完整脚本”中的fakeid、token、type等的值在url中可以看到

9.png

也可以直接访问这个url,一个JSON格式的数据:

10.png
# -*- 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)

11.png

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK