拒绝低效!Python教你爬虫公众号文章和链接

开发 后端
上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只能一篇篇的选择,是个单选框。

[[314719]]

 前言

上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只能一篇篇的选择,是个单选框。

 

面对几百篇的文章,这样一个个选择的话,是一件苦差事。

pk哥作为一个 Pythoner,当然不能这么低效,我们用爬虫把文章的标题和链接等信息提取出来。

抓包

我们需要通过抓包提取公众号文章的请求的 URL,参考之前写过的一篇抓包的文章 Python爬虫APP前的准备,pk哥这次直接抓取 PC 端微信的公众号文章列表信息,更简单。

我以抓包工具 Charles 为例,勾选容许抓取电脑的请求,一般是默认就勾选的。

 

为了过滤掉其他无关请求,我们在左下方设置下我们要抓取的域名。

 

 

打开 PC 端微信,打开 「Python知识圈」公众号文章列表后,Charles 就会抓取到大量的请求,找到我们需要的请求,返回的 JSON 信息里包含了文章的标题、摘要、链接等信息,都在 comm_msg_info 下面。

 

这些都是请求链接后的返回,请求链接 url 我们可以在 Overview 中查看。

 

通过抓包获取了这么多信息后,我们可以写爬虫爬取所有文章的信息并保存了。

初始化函数

公众号历史文章列表向上滑动,加载更多文章后发现链接中变化的只有 offset 这个参数,我们创建一个初始化函数,加入代理 IP,请求头和信息,请求头包含了 User-Agent、Cookie、Referer。

 

这些信息都在抓包工具可以看到。

 

请求数据

通过抓包分析出来了请求链接,我们就可以用 requests 库来请求了,用返回码是否为 200 做一个判断,200 的话说明返回信息正常,我们再构建一个函数 parse_data() 来解析提取我们需要的返回信息。

 

  1. def request_data(self): 
  2.     try: 
  3.         response = requests.get(self.base_url.format(self.offset), headers=self.headers, proxies=self.proxy) 
  4.         print(self.base_url.format(self.offset)) 
  5.         if 200 == response.status_code: 
  6.            self.parse_data(response.text) 
  7.     except Exception as e: 
  8.         print(e) 
  9.         time.sleep(2) 
  10.         pass 

提取数据

通过分析返回的 Json 数据,我们可以看到,我们需要的数据都在 app_msg_ext_info 下面。

 

我们用 json.loads 解析返回的 Json 信息,把我们需要的列保存在 csv 文件中,有标题、摘要、文章链接三列信息,其他信息也可以自己加。

 

  1. def parse_data(self, responseData): 
  2.             all_datas = json.loads(responseData) 
  3.             if 0 == all_datas['ret'and all_datas['msg_count']>0: 
  4.                 summy_datas = all_datas['general_msg_list'
  5.                 datas = json.loads(summy_datas)['list'
  6.                 a = [] 
  7.                 for data in datas: 
  8.                     try: 
  9.                         title = data['app_msg_ext_info']['title'
  10.                         title_child = data['app_msg_ext_info']['digest'
  11.                         article_url = data['app_msg_ext_info']['content_url'
  12.                         info = {} 
  13.                         info['标题'] = title 
  14.                         info['小标题'] = title_child 
  15.                         info['文章链接'] = article_url 
  16.                         a.append(info) 
  17.                     except Exception as e: 
  18.                         print(e) 
  19.                         continue 
  20.  
  21.                 print('正在写入文件'
  22.                 with open('Python公众号文章合集1.csv''a', newline='', encoding='utf-8'as f: 
  23.                     fieldnames = ['标题''小标题''文章链接']  # 控制列的顺序 
  24.                     writer = csv.DictWriter(f, fieldnames=fieldnames) 
  25.                     writer.writeheader() 
  26.                     writer.writerows(a) 
  27.                     print("写入成功"
  28.  
  29.                 print('----------------------------------------'
  30.                 time.sleep(int(format(random.randint(2, 5)))) 
  31.                 self.offset = self.offset+10 
  32.                 self.request_data() 
  33.             else
  34.                 print('抓取数据完毕!'

这样,爬取的结果就会以 csv 格式保存起来。

运行代码时,可能会遇到 SSLError 的报错,最快的解决办法就是 base_url 前面的 https 去掉 s 再运行。

保存markdown格式的链接

经常写文章的人应该都知道,一般写文字都会用 Markdown 的格式来写文章,这样的话,不管放在哪个平台,文章的格式都不会变化。

在 Markdown 格式里,用 [文章标题](文章url链接) 表示,所以我们保存信息时再加一列信息就行,标题和文章链接都获取了,Markdown 格式的 url 也就简单了。

 

  1. md_url = '[{}]'.format(title) + '({})'.format(article_url) 

爬取完成后,效果如下。

 

我们把 md链接这一列全部粘贴到 Markdown 格式的笔记里就行了,大部分的笔记软件都知道新建 Markdown 格式的文件的。

 

这样,这些导航文章链接整理起来就是分类的事情了。

责任编辑:华轩 来源: Python知识圈
相关推荐

2021-06-10 18:24:59

反爬虫验证码爬虫

2017-08-01 17:02:19

代码Python数据

2015-09-29 11:02:44

微信公众号运营

2022-01-15 07:22:45

RSS订阅互联网聚合阅读

2022-12-05 10:47:37

2023-11-23 19:36:58

2013-04-08 15:56:49

2013-04-09 22:41:00

微信公众平台公众账号

2021-10-22 15:06:38

腾讯微信移动应用

2024-03-28 08:10:37

Java技巧SEO

2021-04-14 14:37:13

微信公众号腾讯

2019-12-27 13:31:33

Talking DatAI人工智能

2014-02-19 11:12:35

2010-03-15 15:21:40

Python分割器

2015-08-24 15:08:50

OpenShiftNode.js微信开发

2013-04-10 18:12:57

2020-11-19 15:38:07

Android微信改版

2014-12-19 10:11:37

微信公众号

2020-07-10 08:24:18

Python开发工具

2018-05-14 15:27:06

Python网络爬虫爬虫架构
点赞
收藏

51CTO技术栈公众号