转载自: 公众号文章数据抓取
- 功能
- 原理
- 文章 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,具体包括:aid
、 title
、 cover
、 link
、 ctime
、 utime
、 tags
、 digest
、 checking
、 copyright_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
。
代码
今天来不及了,后面有机会开源出来吧……