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);