Crawler4j概述

crawler4j是一款基于Java的轻量级单机开源爬虫框架,最大的一个特点就是简单。另外也支持多线程、支持代理、可以过滤重复URL
基本上从加载jar到工程里面 通过修改示例的代码就可以简单的实现一个爬虫的全部功能,而这一切动作加起来都不需要超过半个小时。

爬虫安装

官方文档里面提到了两种方式,一种通过Maven安装(一种开发工具),但是因为这里又涉及到了一种新的工具的学习,有花费大量时间的可能,遂果断放弃。另外一种安装方式就是导入.jar包,通过开发版本链接然后加入到Java工程里面就可轻松完成(虽然整个jar包体积庞大达32M)
官方网址:https://github.com/yasserg/crawler4j
jar链接:https://github.com/yasserg/crawler4j/releases

爬虫使用

使用爬虫最基本要完成两个类:继承WebCrawler的MyCrawler类 以及可以控制多个爬虫的Controller类。

WebCrawler类:

这里要必须要做的是对于两个方法的重写
public boolean shouldVisit(Page referringPage, WebURL url)

public void visit(Page page)

shouldVisit方法决定一个给定的URL是否英爱访问,这里主要是通过对于模式的限制来实现的

visit:解析网页内容,page类包含了丰富的方法,可以利用这些方法得到网页的内容和属性。

例如:如果想爬取指定贵的页面,可以修改BasicCrawler的shouldVisit方法

private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" + "|png|tiff?|mid|mp2|mp3|mp4"
+ "|wav|avi|mov|mpeg|ram|m4v|pdf" + "|rm|smil|wmv|swf|wma|zip|rar|gz))$"); /**
* 是否抓取页面
*/
@Override
public boolean shouldVisit(WebURL url) {
String href = url.getURL().toLowerCase();
return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/");
}

Controller类:

这个类用来控制爬虫,首先在这个类中addseed,然后开启多个爬虫,并且不断监听各个爬虫的存活状态。
在controller类中,可以设置爬虫的相关属性
/* * 爬取时数据临时存放目录. */
String crawlStorageFolder = "D:/tmp";
/* * 爬取线程数,即同时有多少个爬虫工作. */
int numberOfCrawlers = 5;
爬取指定的网站:
/*
* 添加入口URL
*/ controller.addSeed("http://www.ics.uci.edu/");
controller.addSeed("http://www.ics.uci.edu/~lopes/");
controller.addSeed("http://www.ics.uci.edu/~welling/"); /*
* 开始工作
*/
controller.start(BasicCrawler.class, numberOfCrawlers);
另外在controller里面还可以设置爬取的数量以及爬取的深度
/*
* 深度,即从入口URL开始算,URL是第几层。如入口A是1,从A中找到了B,B中又有C,则B是2,C是3
*/
config.setMaxDepthOfCrawling(2); /*
* 最多爬取多少个页面
*/
config.setMaxPagesToFetch(1000);

这样就实现了一个简单的爬虫,但是在我们的项目里面必定会涉及到深层次的功能,例如爬取记录的保存与重新载入(避免每次运行之间不能避免重复),以及爬取不能解析的格式的文件 这些功能都还有待研究 请期待后续更新

05-11 01:22