转载自: 公众号文章数据抓取

  • 功能
  • 原理
  • 文章 Meta
  • 文章内容
  • 深度数据 1
  • 深度数据 2
  • 代码

上周,“十分”十分卑劣地“偷袭”了我们——扫荡 looteW(倒过来吧),波及到了 WeChatFerry。几个群里都嗷嗷叫说被强制退出。

那会儿项目很忙,无暇顾及;后来有个优先级更高的任务:搞公众号的文章做分析。所以 WeChatFerry 升级的事情就往后推了。不过期间有伙伴找到我说一块儿来弄,我是非常欢迎的,可以通过 WeChatFerry 群找到查克,一起玩耍。

今天汇报一下搞公众号文章的任务完成情况,下图是获取到的信息概览:

功能

项目还没起名字,目前实现的功能有:

  • 抓取文章,保存成 Markdown,方便后期处理
  • 抓取文章 Meta,包括:
  • 文章 ID
  • 标题
  • 封面链接
  • 文章链接
  • 发布时间
  • 修改时间
  • 合集
  • 版权类型(原创、转载……)
  • 摘要
  • 作者
  • 发布 IP 地址
  • 评论 ID
  • 深度数据:
  • 阅读量
  • 在看量
  • 点赞量
  • 评论量
  • 评论内容

通过这些数据,应该可以做蛮多分析了。

原理

上面这些数据,按大块来分有四类:

  • 文章 Meta
  • 文章内容
  • 深度数据 1(阅读、在看、点赞)
  • 深度数据 2(评论)

下面分类介绍。

文章 Meta

本项目采用了公众号后台插入链接时的一个查询接口;另外一个可能可行的方案是,翻公众号历史文章,但需要先关注该号。 接口地址:https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex。需要几个参数:

  • begin,游标,这接口每次允许拉 5 次发布的文章(一天最多发布一次,一次最多发布 8 篇,所以每次拉取最多 40 篇文章)
  • fakeid,估计就字面意思了,公众号对应的对外 id
  • token,这个没啥解释的了

通过这个接口,就可以拿到文章的大部分 Meta,具体包括:aidtitlecoverlinkctimeutimetagsdigestcheckingcopyright_type

这接口有请求限制,目测是 50 请求每小时。所以理论抓取速度是:50x5x1 ~50x5x8,即每小时 250 篇~2000 篇。

文章内容

这个比较简单,直接通过文章的链接(link)就可以获取文章内容,然后通过 html2md,转成 Markdown。发布 IP 地址和评论 ID 也通过文章内容获取。

深度数据 1

阅读量、点赞量、在看量在网页是看不到的,需要模拟客户端才行。这就需要抓包了。

本项目使用的工具是 mitmproxy,中间人代理。通过抓包,获取到三个关键参数:

  • key,类似于前面的 token
  • uin,浏览者账号
  • user-agent,为了模仿得更像

其中,key 应该是有时长限制,目前还没试出来;同时 key 也有请求速度限制,目前看起来,可能每分钟超过 30 次就不行了。

接口地址:https://mp.weixin.qq.com/mp/getappmsgext

深度数据 2

前面已经获取到了三个关键参数,这里就比较简单了。

接口地址:https://mp.weixin.qq.com/mp/appmsg_comment

代码

今天来不及了,后面有机会开源出来吧……