前言上篇文章整理的所有文章公众号的导航链接,其实手动整理是一件很费力的事情,因为在公众号添加文章时,只能选择一个文章,就是一个单选按钮。面对成百上千篇文章,要一一挑选是一件很辛苦的工作。pk哥,作为一个Pythoner,当然不能这么低效。我们使用爬虫来提取文章标题和链接等信息。抓包,我们需要通过抓包的方式,提取出公众号文章的请求URL。Python爬虫APP之前的准备可以参考之前的抓包文章。这次Pk哥直接在PC端抓取了微信的公众号文章。列出信息,更简单。我以抓包工具Charles为例,勾选允许本机抓包的请求,一般默认勾选。为了过滤掉其他不相关的请求,我们在左下方设置了我们要爬取的域名。打开PC端微信,打开“Python知识圈”公众号文章列表,Charles会抓取大量请求,找到我们需要的请求,返回JSON信息包括标题、摘要、链接等信息文章的全部在comm_msg_info下。这些都是请求链接后返回的,我们可以在Overview中查看请求链接url。通过抓包得到这么多信息后,我们就可以写一个爬虫来爬取所有文章的信息并保存起来。初始化函数公众号历史文章列表向上滑动。加载更多文章后,发现只有链接中的参数偏移发生了变化。我们创建一个初始化函数并添加代理IP、请求标头和信息。请求头包括User-Agent、Cookie、Referer。在抓包工具中可以看到这些信息。通过抓包分析请求数据,得到请求链接。我们可以使用requests库来请求,通过返回码是否为200来判断,如果返回码为200,则返回信息正常。让我们构建一个函数parse_data()来解析和提取我们需要的返回信息。defrequest_data(self):try:response=requests.get(self.base_url.format(self.offset),headers=self.headers,proxies=self.proxy)print(self.base_url.format(self.offset))if200==response.status_code:self.parse_data(response.text)exceptExceptionase:print(e)time.sleep(2)pass提取数据通过分析返回的Json数据,我们可以看到我们需要的数据都在app_msg_ext_info下。我们使用json.loads解析返回的Json信息,将我们需要的列保存在csv文件中。共有三列信息:标题、摘要和文章链接。其他信息也可以自行添加。defparse_data(self,responseData):all_datas=json.loads(responseData)if0==all_datas['ret']andall_datas['msg_count']>0:summy_datas=all_datas['general_msg_list']datas=json.loads(summy_datas)['list']a=[]fordataindatas:try:title=data['app_msg_ext_info']['title']title_child=data['app_msg_ext_info']['digest']article_url=data['app_msg_ext_info']['content_url']info={}info['title']=titleinfo['subtitle']=title_childinfo['文章链接']=article_urla.append(info)exceptExceptionase:print(e)continueprint('写入文件')withopen('Python公众号文章集1.csv','a',newline='',encoding='utf-8')asf:fieldnames=['title','subtitle','articlelink']#顺序控制列writer=csv.DictWriter(f,fieldnames=fieldnames)writer.writeheader()writer.writerows(a)print("写入成功")print('-----------------------------------------')time.sleep(int(format(random.randint(2,5))))self.offset=self.offset+10self.request_data()else:print('爬取数据完成!')这样,爬取结果将以csv格式保存。运行代码时,您可能会遇到SSLError错误。最快的解决办法是把base_url前面的https去掉s,然后运行。以markdown格式保存链接经常写文章的人应该都知道,一般写文章都会用Markdown格式来写。在这种情况下,无论放在哪个平台,文章的格式都不会改变。在Markdown格式中,是用[文章标题](文章url链接)来表示的,所以我们可以在保存信息的时候再增加一列信息。获取标题和文章链接,简单的Markdown格式的url。md_url='[{}]'.format(title)+'({})'.format(article_url)爬取完成后效果如下。我们只是将所有的md链接列以Markdown格式粘贴到笔记中。大多数笔记软件都知道以Markdown格式创建新文件。这样,整理这些导航文章链接,就是一个分类问题。
