爬取微信公众号文章1获取文章链接

爬取微信公众号的文章,之前一直觉得应该很难,我搞不定,但是尝试了一下发现,其实这和之前爬取的网站没有太大的区别。

本文记录了 2019 年 8 月 7 日爬取某一特定微信公众号的所有文章链接的方式,读者请注意时效性。

前言

  • 需要一个可登录的微信公众号。本文采用的方法是使用微信公众号内部的搜索来搜索文章。
  • 由于登录部分很复杂,我还没搞懂,本文直接手动获取 cookies 来登录。

参考链接

记一次微信公众号爬虫的经历-CSDN

如何手动获取

在登录后的微信公众平台的【素材管理】页面,点击【新建图文素材】,在新出现的编辑页面内,找到用于插入别的文章引用的,【超链接】图标。接着就会出现下图的窗口,输入需要获取的公众号查找即可。

分析

打开 F12 开发者工具,搜索到公众号之后,查看 Ajax 请求

换页的时候会再次发出 Ajax 请求,多换几页,查看它们的参数的规律。

通过观察,知道了接口是:

1
https://mp.weixin.qq.com/cgi-bin/appmsg

在访问这个接口时,需要在后面带上参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
data = {
'token':'271444813', #在同一次登录不变,在首页源代码里面可以获取
'lang':'zh_CN', # 不变
'f':'json',# 不变
'ajax':'1',# 不变
'random': str(random.random()),# 随机数
'action':'list_ex',# 不变
'begin':'0',# 代表页数,每翻一页就会+5,但是每一页的文章数不一定为5篇
'count':'5', # 应该是每一次获取的文章篇数
'query':'',# 不变
'fakeid':'MzAwNjA3Nzg0MA==',# 文章所在的公众号的id
'type':'9',# 不变
}

获取步骤

  1. 登录微信公众平台
  2. 手动在开发者工具中获取 cookies 字符串
  3. 带好参数访问 Ajax 接口,获取到所需要的 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
39
40
41
42
43
import requests
import random

def cookiejar_from_str(cookies_str):
'''
将cookies字符串转换为cookiejar
'''
cookies=dict([item.split('=',1) for item in cookies_str.split(';')])
print(cookies)
cookies=requests.utils.cookiejar_from_dict(cookies)
return cookies


if __name__ == '__main__':
# cookies字符串
cookies_str='''openid2ticket_okSCe0vbk_v5067L-AuViT1wrkEg=ARU37unMfUwam3yNHXFcw5CMFvTHMvmBnjjS8A8=
'''.strip() # 这里我手动截去了大部分cookies字符串,明白意思即可
# headers
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}

cookies = cookiejar_from_str(cookies_str)

data = {
'token':'271444813', #在同一次登录不变,在首页源代码里面可以获取
'lang':'zh_CN', # 不变
'f':'json',# 不变
'ajax':'1',# 不变
'random': str(random.random()),# 随机数
'action':'list_ex',# 不变
'begin':'0',# 代表页数,每翻一页就会+5,但是每一页的文章数不一定为5篇
'count':'5', # 应该是每一次获取的文章篇数
'query':'',# 不变
'fakeid':'MzAwNjA3Nzg0MA==',# 文章所在的公众号的id
'type':'9',# 不变
}
url='https://mp.weixin.qq.com/cgi-bin/appmsg'
response_json = requests.get(url, cookies=cookies,headers=headers, params=data).json()

for item in response_json["app_msg_list"]:
# 获取url
print(item['link'])
作者

憧憬少

发布于

2019-08-07

更新于

2019-08-07

许可协议