关键词文章采集器(一个公众号文章爬取的使用很简单,先实例化一个WechatSogouAPI)

优采云 发布时间: 2021-11-28 08:15

  关键词文章采集器(一个公众号文章爬取的使用很简单,先实例化一个WechatSogouAPI)

  一方面可能会漏掉一些公众号更新的重要信息,另一方面也经常看到转载重复的文章。

  我能做什么?

  作为高(师)男票,我是看在眼里,在心里着急的人!

  然后为公众号文章写一个采集器,每天早上9点,爬下昨天以来各行业公众号发布的文章的标题、摘要和链接. , 形成文档发送给女票,可以大大方便阅读。

  这么开心的决定

  要求很简单,主要分为两部分,一是公众号文章爬取,二是将爬取回来的文章存为word文档。

  公众号文章爬取

  首先,我从女票上问了她关注的公众号,但是她给我发了一个很长的50多个公众号列表。算了,如果每个公众号一天更新3个文章,那她每天至少要读150个公众号文章,真是窒息。

  接下来就是爬取公众号文章。对此,轮子已经人工搭建,即基于搜狗微信搜索的微信公众号爬虫界面:WechatSogou,谢谢@Chyroc。

  门户网站:

  也就是说,我们不需要自己制作轮子,我们只需要调用API。

  微信的使用很简单。先实例化一个微信搜狗API,然后调用get_gzh_article_by_history()方法返回最近10篇文章。比如要爬取《新西兰的阿尔弗雷德》的文章,即:

  ws_api = wechatsogou.WechatSogouAPI()ws_api. get_gzh_article_by_history('阿尔弗雷德在新西兰')

  这样就可以返回一个json文件,里面收录“新西兰阿尔弗雷德”公众号文章的最后10篇文章。

  这个轮子在呼啸吗?

  可以看到,文章存储在“文章”对应的列表中,相关信息包括标题(title)、摘要(abstract)、文章链接(content_url)、发表时间(datetime ),是否有标题(main)、版权状态(copyright_stat)等。

  这意味着只要实例化一个微信搜狗API,然后遍历一长串公众号,就可以抓取所有最近发布的公众号文章。然后添加一个时间过滤器以获取过去一天发布的 文章。

  当然,作为有爱心的男票,我还加了标题文章过滤器和原创文章过滤器。默认情况下,不是标题和 文章@ 不是 原创。> 过滤掉,封装成函数:

  from datetime import *import wechatsogou# 文章Crawl def get_articles(headline=True, original=True, timedel=1, add_account=None): with open('gzh.txt','r') as f: accounts = [帐户。strip() 用于 f 中的帐户。readlines()] # add_account 必须是一个列表或者 None 如果 add_account 不是 None: if isinstance(list, add_account): accounts. extend(add_account) with open('gzh.txt','w') as f: for account in accounts:f. write(account) else:print('add_account 应该是一个列表')ws_api = wechatsogou.

  WechatSogouAPI(captcha_break_time=3)articles = [] for account in accounts:articles.extend(reformat(ws_api.get_gzh_article_by_history(account))) #时间过滤,只选择指定天数内的时间戳 = int((datetime) .now()-timedelta(days=timedel)).timestamp())articles = [article for article if article['datetime']> timestamp] # Headlines文章过滤,是否选择标题文章 , 默认为 if title:articles = [article for article in articles if article['main'] == 1] # 原创文章过滤器,是否选择原创 文章 , 默认为 if original:articles = [article for article in articles if article['copyright_stat'] == 100] returnarticles#在保存每篇文章的字典中添加公众号来源文章@ >def 重新格式化(数据):atcs = 数据。

  get('article') 如果 atcs 不是 None:wechat_name = data. get('gzh')['wechat_name'] for article in atcs:article['wechat_name'] = wechat_name return atcs

  存储为word文档

  最后爬回来的文章是一个list,里面的每个dict都存储了每个文章的信息。我们需要将此列表保存在word文档中并以清晰的排版方式呈现。

  这时候就有了一个叫做python-docx的库,可以非常方便的帮助我们做到这一点。

  门户网站:

  Python-docx的使用也很简单,实例化一个类,然后通过add_headingd()方法添加标题,通过add_paragraph()方法添加段落,通过add_picture()方法添加图片,然后根据我们的想法排版。例如:

  from docx import Documentfrom docx.shared import Inchesdocument = Document() # 实例化一个文档类 document.add_heading('This is a title', 0) # 添加一个标题 document.add_paragraph('This is a paragraph') #添加段落 document.add_picture('A picture.jpeg', width=Inches(1)) 添加图片

  上面这段代码生成的word文档长这样:

  所以,遍历爬回来的列表,排版,保存到本地,就大功告成了。

  终于爬回来的文档一开始是这样的:

  结局是这样的:

  成功传播狗粮!溜了~

  后记:

  1. 以后可以给这个采集器添加更多的功能,比如添加一个功能,将word直接以email的形式发送到邮箱,或者另存为Excel的功能等。 ,都是可能的;

  2. 当然也可以转成小程序,方便操作;

  3. 由于验证码识别,部分验证码需要人工识别。希望以后的微信搜狗能更强大;

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线