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

优采云 发布时间: 2022-01-31 11:02

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

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

  如何才能做到这一点?

  作为一个合体(gao)(shi)的男票,我是看在眼里,心里忐忑的人!

  那就写一个公众号文章的采集器,每天早上9:00,我会爬下各个公众号发布的文章的标题、摘要、链接等相关信息从昨天开始的行业。,形成一个文件,发送给女票,可以大大方便阅读。

  很高兴做出决定

  需求很简单,主要分为两部分,一是爬取公众号文章,二是将爬取的文章存为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篇文章。

  车轮会晃动吗?

  可以看到文章存储在“文章”对应的列表中,相关信息包括标题、摘要、文章链接(content_url)、发表时间(datetime)、是否为a标题(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 必须是一个列表,如果 add_account 不是 None 则为 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] #标题文章过滤,是否选择标题文章 , 默认为 if header:articles = [article for article in items if article['main'] == 1] # 原创文章过滤,是否选择原创 文章 , 默认为 if original:articles = [article for article in authors if article['copyright_stat'] == 100] return items# 为每个文章 保存的字典添加公众号来源默认重新格式化(数据):atcs = 数据。

  get('article') 如果 atcs 不是 None: wechat_name = data. get('gzh')['wechat_name'] 获取 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('这是一个标题', 0) # 添加一个标题 document.add_paragraph('这是一个段落') #添加段落 document.add_picture('A picture.jpeg', width=Inches(1)) 添加图片

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

  因此,遍历爬取回来的列表,然后排版,保存到本地,就大功告成了。

  最后爬回来的文档是这样开始的:

  它的结尾是这样的:

  撒狗粮成功!滑倒了~

  后记:

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

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

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线