2021年7月28日更新
这里有我写的另一篇 关于文章阅读数抓取的文章,有兴趣可以看一下 //www.greatytc.com/p/8794449fe335
以下是正文
文中四种方式,均为我本人亲身使用过, 文中所有的文字及图片均为本人身亲自编写和截图, 如果转载,请标明来源
由于微信公众号爬虫的特殊性,微信公众号爬虫始终是爬虫工程师比较头疼的一个问题。
本文主要介绍一下目前市面上各种爬虫的优劣性以及适用群体
如果您有任何不同见解,或者除文中四种方式之外的方式.欢迎留言跟我交流.
1.搜狗微信(https://weixin.sogou.com/)
优点: 易于抓取,唯一的限制只有验证码(可以通过更换代理ip避免)
缺点: 无法通过公众号搜索,获取指定公众号文章, 无法获取永久链接 (文章只有几个小时有效期,过后无法打开),无法获取阅读数
难点: 验证码(通过代理ip可以解决)
适用群体: 个人抓取文章后保存,后可用于做数据分析
原理简介: 通过程序请求搜狗的首页, 分析html结构, 通过正则匹配 拿到文章的url 即可. 如下图所示
2. 基于中间人以及脚本的方式
优点: 可以低成本获取数据,并且可以获取阅读数
缺点: 抓取数据有限(微信限制,无法解决),难于部署(需要脚本+抓包工具转发),可能会封号!!!
适用群体: 个人抓取规模很小的情况下,或者企业用于小规模抓取(100个公众号左右)
原理简介:
通过点击的方式 正常向微信发送请求,但是在配置了抓包工具等方式的中间人代理,可以捕获到点击的链接,从而抓取返回的数据发送到服务端
脚本可以通过按键精灵或者其他语言的自动化程序来实现
流程演示如下( 演示 使用的是mac版客户端, win/mac/ios/android 客户端同理 )
a.配置好抓包工具(charles/fiddler) 或中间人代理
b.在客户端随意点击一篇文章
c.查看抓包工具的请求
d.配置转发
不过这个方式只能转发参数, 转发参数后,可以在服务端模拟请求即可. 后面我会完善一篇anyproxy实现结果的转发.
不过请注意!!!! 这种方式应该很可能会封号, 因为在点击文章的同时 相当于阅读了某一篇文章. 所以建议拉长抓取间隔,降低每天抓取次数(100~200次之内可能比较合理).
3.公众号后台抓取
优点: 可以请求多次,并且不依赖与微信号不会有封号的风险
缺点: 无法抓取阅读数, 需要申请微信公众号, 需要人为操作(授权扫码), 稳定性可能相对差一些(异常导致操作失效)
难点: 自动化操作流程
适用群体: 只想抓文章,不需要阅读数,并且对稳定性不太在意的
原理简介:
a.首先打开微信公众平台官网 https://mp.weixin.qq.com/ ,并且扫码登录
b. 左侧菜单栏选择创作管理->图文素材->新的创作->图文消息
c. 点击超链接 选择公众号, 手动输入需要抓取的公众号
d.此时可以打开浏览器检查元素 查看一下请求(提前打开检察元素 不然无法拦截到请求)
可以看到两个 XHR的资源 searchbiz是查询公众号 appmsg是获取公众号文章
https://mp.weixin.qq.com/cgi-bin/searchbiz
https://mp.weixin.qq.com/cgi-bin/appmsg
具体参数请自行抓包查看 很简单的几个参数
e.到此为止 整套流程就完事了, 需要做的就是 通过自动化的程序 来实现如下操作, 如果追求一体化的操作并且熟悉python的朋友 可以尝试用selenium来操作,这个方式相对简单一些,如果不太熟悉python的朋友 可以手动登录并且扫码后 导出 cookie , 然后再用自己熟悉的语言,使用cookie并请求接口 即可实现 (核心问题就是cookie)
4.购买成熟的api方案
优点: 不需要任何部署,直接调用api即可实现,可获取阅读数和文章,也可以通过关键词搜索
缺点: 大部分可能需要付费.
难点: 无
适用群体: 需求量比较大的企业,并且需要数据稳定性较高
原理简介: 封装好的数据接口,底层应该是由一套分布式的稳定架构来实现, 由一些小号以及代理ip来实现规模大一点的抓取