爬虫与自动化在微信公众号发布文章上的应用

最近利用闲暇空余时间,尝试将一个想法落地,进而形成一款产品。这个想法是,将微信公众号的发布文章尽可能的自动化;期间也对涉及到的爬虫、自动化进行了思考和发散性实践,一并记录一下。

缘起

微信公众号作为微信中相当大的流量载体,我们何不利用关键字搜索将长尾的小流量利用起来呢?那么,细化到实际的需求就是:在某一块领域,不断每天发布相关文章,吸引到通过关键字搜索而来的用户流量实现原始积累。这里暂不考虑搜索关键字优化等,先快速迭代,敏捷起来。

从问题抽象到需求具象

一般来说,微信公众号的文章发布主要是作者通过以下步骤完成:


flow1

可以将该过程抽象为:


flow2

具体的技术实现方式归纳如下:


flow3

数据爬虫

爬虫作为一种获取数据的方式,涉及的面还是很广的,结合实际使用和了解的情况,做了如下的归纳。

  1. 两种攻防场景

    • JS 注入/接口层面可以搞定的数据
      • 静态页面为主
      • 从源代码/接口角度出发,一旦改版需要人工介入
    • 页面层面才能搞定的数据
      • 动态页面为主(大趋势)
      • Appium/Puppeteer 等工具较重,比较耗时
      • 支持可视化,可基于截图进行图像识别后获取数据
  2. 具体涉及的工具

    • 正则匹配:繁琐低效,门槛不高
    • BeautifulSoup/lxml:强大的元素解析器
  3. 爬虫策略

    • 广度优先
    • 深度优先
    • 两者结合的特定策略
  4. 反爬虫对抗(高频爬虫必备)

  5. 数据的结构化/持久化

    • 写文件
    • 存数据库
  6. 爬虫框架 Scrapy

生成符合格式的文本-排版编辑器

在完成“收集数据”后,需要将文本处理成符合的格式。比如,实现微信公众号排版编辑器的功能,可转换 Markdown 到微信特制的 HTML。

自动化

顾名思义,自动化就是将繁琐的重复性操作简化。在自动化这一块,主要实践了两款比较知名的工具:Appium 和 Puppeteer。

主要用于 App 端自动化测试(自动跑批验证主流程),当然也能利用其自动化特性获取数据(需对截图进行二次加工处理)。例如:从“同花顺”线上 App 中获取上证 A50 每只股票的 K 线图。

Google 维护的基于 Chromium 的开发自动化工具,主要用于动态网页页面的自动化测试。例如:在微信公众号官网完成自动发布文章的工具就是基于 Puppeteer 实现的。

结语

从一个实际需求出发,对整个实现流程进行了梳理和具象。将需求分解成一些较小的问题,并通过输入 -> 处理 -> 输出的方法论进行解决。

文章目录
  1. 1. 缘起
  2. 2. 从问题抽象到需求具象
  3. 3. 数据爬虫
  4. 4. 生成符合格式的文本-排版编辑器
  5. 5. 自动化
  6. 6. 结语