Crawler4j學習筆記


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

這樣就實現了一個簡單的爬蟲,但是在我們的項目里面必定會涉及到深層次的功能,例如爬取記錄的保存與重新載入(避免每次運行之間不能避免重復),以及爬取不能解析的格式的文件 這些功能都還有待研究 請期待后續更新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM