Alfred的女票是一枚数据科学领域的新媒体运营官(是的,Alfred是一名程序员,Alfred有女票),每天都要阅读大量的行业相关文章,以掌握行业的动向,挑选和生产相关内容。为此,她关注了一大批的相关公众号,每天都一个个公众号挨个点开阅读,怪麻烦的。

一来可能漏掉某些公众号更新的重要讯息,二来经常会看到转载的重复性的文章。

这可咋办呢?

身为一个合(gao)格(shi)的男票,我是那个看在眼里急在心里啊!


那就写一个公众号文章的收集器吧,每天早上9点的时候都把昨天一天以来各个行业内公众号发表的文章的标题、摘要和链接等相关信息爬下来,形成一个文档发给女票,这样可以大大方便阅读。

就这么愉快地决定了

需求很简单,主要分为两块,一块是公众号文章爬取,一块是把爬回来的文章储存为word文档。

公众号文章爬取

首先跟女票要了她关注的公众号,结果她发我很长很长的一串列表,足足有50多个公众号。算了算,如果每个公众号每天更新3篇文章,那么她每天最少就得看150多篇公众号文章,确实是够呛呀。

接着是爬取公众号文章。这方面早已有人造好了轮子,也就是基于搜狗微信搜索的微信公众号爬虫接口:WechatSogou,在此感谢@Chyroc。

传送门:

https://github.com/Chyroc/WechatSogou

也就是,我们不用自己造轮子,只需要调用API就好了。

wechatsogou 的使用很简单,先实例化一个WechatSogouAPI,便可以调用get_gzh_article_by_history()方法返回最近10篇文章,比如说要爬取“Alfred在纽西兰”的文章,便是:

ws_api = wechatsogou.WechatSogouAPI()
ws_api. get_gzh_article_by_history('Alfred在纽西兰')

这样便可以返回一个json文件,里面包含“Alfred在纽西兰”公众号的最近10篇文章。

这个轮子是不是嗖嗖的?

可见,文章储存在“article”对应的列表里,相关的信息有标题(title)、摘要(abstract)、文章链接(content_url)、发表时间(datetime)、是否头条(main)、版权状况(copyright_stat)等。

这就是说,只要实例化一个WechatSogouAPI,然后遍历一下长长的公众号列表,便可以把所有公众号近期发表的文章爬取下来了。然后加一个时间过滤,便可获得一天以来发表的文章。

当然,作为一个贴心的男票,我还加上了头条文章过滤和原创文章过滤,默认把不是头条和不是原创的文章都过滤掉,并把它封装成一个function:

from datetime import *
import wechatsogou

# 文章爬取
def get_articles(headline=True, original=True, timedel=1, add_account=None):

with open('gzh.txt', 'r') as f:
      accounts = [account.strip() for account in f.readlines()]
  # add_account必须是一个list或None
  if add_account is not 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 should be a list')

ws_api = wechatsogou.WechatSogouAPI(captcha_break_time=3)
  articles = []
  for account in accounts:
      articles.extend(reformat(ws_api.get_gzh_article_by_history(account)))

# 时间过滤,只选取规定天数以内的
  timestamp = int((datetime.now()-timedelta(days=timedel)).timestamp())
  articles = [article for article in articles if article['datetime'] > timestamp]

# 头条文章过滤,是否选取头条文章,默认是
  if headline:
      articles = [article for article in articles if article['main'] == 1]

# 原创文章过滤,是否选取原创文章,默认是
  if original:
      articles = [article for article in articles if article['copyright_stat'] == 100]

return articles

# 为保存每篇文章的字典添加一个公众号来源
def reformat(data):
  atcs = data.get('article')
  if atcs is not None:
      wechat_name = data.get('gzh')['wechat_name']
      for article in atcs:
          article['wechat_name'] = wechat_name
      return atcs

存储为word文档

最后爬回来的文章是一个list,里面每个dict存放着每篇文章的信息。我们需要把这个list保存到word文档里面,并且以一个清晰的排版呈现出来。

这时候有一个叫python-docx的库,可以很方便的帮助我们来做这件事情。

传送门:

https://python-docx.readthedocs.io/

Python-docx的使用也很简单,实例化一个类,再通过add_headingd()的方法添加标题、add_paragraph()方法添加段落、add_picture()方法添加图片,便可以按照我们的想法进行排版。例如:

from docx import Document
from docx.shared import Inches

document = Document()  # 实例化一个Document类
document.add_heading('这是一个标题', 0)  # 添加标题
document.add_paragraph('这是一段话')  # 添加段落
document.add_picture('一个图片.jpeg', width=Inches(1))  添加图片

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

因此,遍历一下爬回来的list,然后排版,保存到本地,便大功告成了。

最后爬回来的文档开头长这样:

结尾长这样:

撒狗粮成功!溜了~

后记:

1. 后期还可以为这个采集器加上更多的功能,比如说再添加一个把word以邮件形式直接发送邮箱的功能,或者保存为Excel的功能等,都是可以的;

2. 当然也可以把它转换成小程序,方便运行;

3. 由于验证码识别的原因,有一些验证码需要人工识别,希望以后的wechatsougou可以更强大;

4. 完整的代码可以在公众号后台回复"公众号文章"获取。

∞∞∞∞∞

IT派 - {技术青年圈}持续关注互联网、区块链、人工智能领域

公众号回复“Python”,

邀你加入{ IT派Python技术群 }

50行代码教你打造一个公众号文章采集器相关推荐

  1. 微信公众平台接口调试工具json格式不对怎么搞_一步步教你打造微信公众号文章爬虫(3)-批量下载...

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  2. python下载微信公众号文章_一步步教你打造微信公众号文章爬虫(3)-批量下载

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  3. 微信公众号文章采集获取方案附接口说明-文章阅读点赞在看数获取工具接口

    更多方案详细分析流程和接口说明地址:根据文章链接获取点赞阅读 | 全网公号数据 搜狗微信采集 注意:此方法列表内容已经采集不到了,可用性基本不高,只能作为补充使用(一般没人使用) 在网上可以找到很多针 ...

  4. 微信公众号文章采集的一些基础概念

    此文已在本人知乎号上首发: 微信公众号文章采集的一些基础概念 背景 经常有人问我微信文章采集相关的基础常识问题,对于新手来说,一些概念性的问题确实不太了解.但经常被问得也烦了,所以单独写一篇文章总结一 ...

  5. python采集微信公众号_Python爬虫,微信公众号文章采集工具

    #微信公众号文章采集 import requests from lxml import etree import re import os def get_con(url): #url="h ...

  6. 公众号文章采集:原理与方法

    自媒体时代,公众号已成为了广大人民群众获取信息的主要渠道之一.但是,很多公众号的文章并非原创,而是采集自其他渠道.那么,这些公众号是如何进行文章采集的呢?本文将逐步分析讨论公众号文章采集的原理与方法. ...

  7. python write非法字符报错_Python爬虫实现的微信公众号文章下载器

    平时爱逛知乎,收藏了不少别人推荐的数据分析.机器学习相关的微信公众号(这里就不列举了,以免硬广嫌疑).但是在手机微信上一页页的翻阅历史文章浏览,很不方便,电脑端微信也不方便. 所以我就想有什么方法能否 ...

  8. python信息检索和评价系统_Python爬虫实现的微信公众号文章下载器

    所以我就想有什么方法能否将这些公众号文章下载下来.这样的话,看起来也方便.但是网上的方法要么太复杂(对于我这个爬虫入门新手来说),要么付费. 但我的需求其实却很简单--"方便的查找 / 检索 ...

  9. python 下载公众号文章_Python爬虫实现的微信公众号文章下载器

    平时爱逛知乎,收藏了不少别人推荐的数据分析.机器学习相关的微信公众号(这里就不列举了,以免硬广嫌疑).但是在手机微信上一页页的翻阅历史文章浏览,很不方便,电脑端微信也不方便. 所以我就想有什么方法能否 ...

最新文章

  1. TCPDUMP中文手册
  2. RASPBERRY PI PICO 开发板 基础测试
  3. C语言一维数组、二维数组、结构体的初始化
  4. 基于matlab的局放仿真,基于MATLAB/Simulink系统仿真权威指南
  5. Thrift入门及Java实例演示
  6. 【CodeForces - 608C】Chain Reaction (二分 或 dp ,思维)
  7. stm32串口_【单片机】STM32串口基本配置
  8. 与我们息息相关的internet服务(2)---WWW服务
  9. 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
  10. 并行 并发 多线程 区别
  11. jetty 找不到html页面,记一次jetty 404问题排查修复
  12. 怎么在Linux中telnet服务器,Linux系统下Telnet服务器配置
  13. Vijos训练计划 1-1 计数问题
  14. CAN FD Bit Timing
  15. Hibernate框架的入门级学习运用
  16. 端口渗透——21端口FTP
  17. 华为计步器下载手机版_华为健运动计步器
  18. win8宽带连接服务器未响应,关于Win8系统连接宽带错误的解决方法介绍
  19. shp与geojson互转
  20. 好玩的接口 之 Java 解密微信小程序获取手机号

热门文章

  1. 《统计学习方法》(李航)第1章主要内容介绍(统计学习概述、分类、三要素)
  2. perl中正则匹配中文字符
  3. 计算机硬盘清理,Win7电脑的磁盘满了怎么办?最简单的清理方法教给你!
  4. 第二章:Djgo后台管理
  5. 应用向左,理论向右,计算机2021的冰火两重天
  6. TCP/IP 面试题整理
  7. 梯度是什么,简单说梯度下降是什么
  8. 解决梯度消失和梯度弥散的方法
  9. 【js】js面试题汇总
  10. 【Linux进程间通信】二、pipe管道