自己开发编写的一套简单易用的Java爬虫框架,轻轻松松帮你抓取数据
VW-Crawler
背景
自己一直对爬虫比较感兴趣,大学的毕业论文也是一个爬虫项目(爬教务处信息,然后做了个Android版教务管理系统,还获得了优秀毕业设计的称号),自那以后遇到自己感兴趣的网站就会去抓一下。前段时间工作上需要一些JD信息,我就从网上找了个开源的爬虫框架WebMagic,使用简单,易配置,功能也很强大,当然了也有些网站的数据不适合使用。前前后后写了不下十几个,慢慢的就想是不是可以把这些爬虫代码再抽象出来,做出一个简易的爬虫框架呢?于是就尝试去看WebMagic的源码,后来又发现了一个源码比较容易解读的爬虫框架XXL-CRAWLER,简单的分析了源码之后,开发自己一套爬虫框架的欲望更加强烈,于是在2017年底的时候就开始了开发,中间断断续续得停了写,写了停。直到最近8月底的时候才算出了一个版本,然后顺势把它放到了Maven公服仓库上。一个人的力量很薄弱,要想完善这个爬虫的健壮性、可用性和易扩展性还需要大家的力量!
特点
- 语言: Java开发,框架比较简单,多处使用的是接口编程,是学习Java不错的例子
- 难度: 及其简单,配置一下,写个解析逻辑,整理下保存方法,就OK了
- 轻量: 使用Jsoup做默认的下载器,依赖性较低
- 线程: 可自主设置线程数抓取,提高抓取效率
- 重试: 支持失败重试,次数可以自定义
- 代理: 支持配置代理池,默认随机使用代理IP,也可自定义算法获取
- 去重: 双重去重,默认对URL去重,也可以定义第二层去重逻辑
- 控制: 可自主控制是否需要解析页面,减少资源的使用
- 精准: 通过设置URL的正则来精准的解析每一个URL
- 扩展: 几乎每一个环节都可以自定义
使用
使用Maven
在http://search.maven.org上使用最新的版本
在pom中引入
1 | <dependency> |
离线使用
可以在项目主页的release下载最新版本jar,然后导入自己的项目中。
步骤
- 配置参数
- 抽象正则
- 解析页面
- 保存数据
各环节均支持自定义
示例
抓取CSDN某用户的博客内容
设置爬虫的基本配置,如User-Agent、起始地址、目标页面的url正则表达式、线程数和超时时间等
1 | new VWCrawler.Builder() |
配置页面数据对象的注解
1 | @CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-title-box > h1", resultType = SelectType.TEXT) |
这里使用比较流行的注解方式,通过cssselector来获取节点数据可通过resultType来指定填充的是text还是html。
随便配置一下,就能抓取一个页面的数据
1 | new VWCrawler.Builder().setUrl("https://www.qiushibaike.com/").setPageParser(new CrawlerService() { |
更多
更多的示例可移步more
抓取了足够多的数据,我们可以拿数据做很多事,比如统计各大人才网的职位分布图
有关ES的可移步这里
最后
轮子造多了就想着造一个模具,代码写多了就想写个框架,一样的道理。帮助他人,顺便提升自己。框架还有很多需要完善的地方,希望使用者多多提issue,也希望大家提PR~