记一次批量定时抓取微信公众号文章的实现
- 抓取前的说明和准备
- 数据的抓取
- 批量抓取
- 定时抓取
- 对爬虫防抓取机制的一些解决办法
- 最后
本次抓取的选择的语言是java,本文章不会将整个工程的全部代码全部贴出,只会提供核心代码和抓取思路的说明。
抓取文章的来源为搜狗微信网站,网站如下图。
抓取的思路如下
- 一般抓取微信公众号的文章都是以微信公众号的id为关键字 ,我们可以通过url+ keyword的形式直接跳转到想要抓取公众号页面,keyword即为想要搜索微信公众号的名称或者是id;
- 为了避免网站对爬虫的初步拦截,我们可以使用Selenium (浏览器自动化测试框架)来伪装自己的爬虫,我们使用的chrome,这里需要注意自己的chrome版本与使用的webdriver的版本是对应的;
- 到达微信公众号列表页面,如下图,获取微信公众号链接。
- 到达微信公众号文章列表页面,如下图;
- 通过对网页元素的分析对微信文章相关信息进行抓取;
批量抓取的实现是通过Spring Batch来实现的。Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。
Spring Batch 分为Reader,Processor,Writer,Listener等几个部分。因为是进行批量抓取,所以可以新建一个稿件抓取历史列表来判断是否为新的稿件,从而判断是否进行抓取。
Spring Batch支持定时抓取,具体规则参考Scheduled。
如果抓取的频率较高,抓取的时候页面会要求输入验证码,我也尝试过许多图片识别的jar包,效果并不是很好。我们采用的是第三方的打码平台,有的时候人工还是比智能更好。我们选择的打码平台是快若打码,其官网上有他的使用方法,他提供了一些第三方接口。识别验证码后输入,继续进行抓取。
以上就是这次抓取的全部内容了,虽然只提供了核心代码和抓取思路,但仍希望能够帮助到大家。
对了,如果需要部署项目的话,这部分功能需要部署到windows服务器,使用centos的话无法识别验证码。