Heritrix工具實現網絡爬蟲


上次用的java相關知識實現了一個簡單的網絡爬蟲,現在存在許多開源免費的爬蟲工具,相對來說,可以很簡單的獲取網頁數據,並寫入到本地。

下面我就闡述一下我用Heritrix爬蟲工具實現網頁數據爬取

------>

目錄

1、Heritrix文件配置

2、Heritrix服務器job配置

3、如何創建job並執行

4、有選擇的爬取網頁

5、總結

----->

 

1‘  基礎文件配置

網上下載heritrix的壓縮包,即可配置一個爬蟲服務器,其核心使用的是Tomcat。

解壓壓縮包,將conf目錄下的文件拷貝到根目錄下

修改根目錄下此文件,將.template去掉。

 

然后用記事本(我用的UItraEdit工具,方便看配置文件和代碼)將文件打開,將@PASSWORD@的內容,更改為你的用戶名和密碼(自定義)。

imxremote.password的文件變為只讀(屬性)

注意:【!!!如果是win7系統,需要將此文件的所有者改為當前用戶,如圖。

點擊“高級”,

 

點擊“編輯”

 

 此處選擇當前的用戶,再點擊”應用“,即可。

!!!

 

2’  服務器Job配置

執行bin目錄下的heritrix.cmd命令,用來啟動這個服務器(必須在命令行下執行)。

 示例:首先進入該文件的bin目錄下,啟動命令為:

heritrix.cmd  --admin=user:password

啟動如果成功,顯示窗口:

啟動成功之后,通過瀏覽器訪問當前服務器的8080端口來准備進行數據采集。

即輸入   localhost:8080/

進入之后首先輸入你剛開始配置時設定的用戶名和密碼。

然后進入首頁:

此窗口可以看到一些選項,有三個選項是比較重要的:

1)    Console:控制台,在這里可以監控當前的任務爬取狀態

2)    Jobs:可以在這里建立新的爬取任務

3)    Profiles:配置爬取的屬性,例如:爬取的總線程數

首先需要在profiles中自己建立一個自定義的爬取的屬性配置。在Profiles選項內選擇New Profile based on it

進入界面:

 

 點擊Modules

這里需要設置爬取時的參數類

例如:爬取的范圍,下載后的保存類型,爬取時所要下載的文件類型等。

首先要注意一點,兩個change必須要點一下,我當時就是忽略了這個導致job無法提交!!!

之后,你需要在此界面下面設置10個類,按我的圖來(規則我就不解釋了)

之后,選擇Settings進行一些其他屬性的配置,此處要更改一個線程數,(這個看你的電腦配置咯),之后再http-headers里面需要填寫你的工具版本,ip地址以及個人郵箱(這個主要是告訴網站管理者哪個帥鍋在爬我的網頁,當然,勸告一下,國外和國內一些大型的網站不要爬取,很容易被監測到也可能觸犯到信息竊取):

之后,點擊Finished會提示Profile modified,表示修改成功

 

3’  建立爬取任務並執行

Jobs選項里,選擇Based on a profile選項,然后選擇剛剛配置的那個myprofile,在此處選擇你需要爬取的網站,我選擇的是新浪新聞的首頁:

然后點擊submit job,如果兩個箭頭都顯示才表示創建job成功,相反我有一個配置類的沒有點擊change下面一個箭頭就會提示初始化錯誤!

 

 此時你進入console點擊Start就會開始執行任務

如果你要結束或者暫停任務,點擊Terminate

此時線程在不斷爬取數據,你不斷的點擊Refresh會發現在不斷更新數據,然后爬取的文件會在heritrix的根目錄jobs里面找到,所有數據存放位置在如下路徑的mirror文件夾內

 

到此刻,網絡爬取結束,如上就是這個工具的使用方法。

 4‘  如何有選擇的爬取網頁

測試時會發現,爬取的內容太雜,不一定都是我們想要的,因此我們需要對這個工具的源代碼進行一些簡單的調整。

首先要將heritrix的jar包備份解壓;

然后需要將heritrix-1.12.1.jar文件拷貝到一個項目里,基於這個文件來進行配置。

 1 package org.liky.utils;
 2 
 3 import org.archive.crawler.datamodel.CandidateURI;
 4 import org.archive.crawler.postprocessor.FrontierScheduler;
 5 
 6 public class SinaNewsScheduler extends FrontierScheduler {
 7 
 8     public SinaNewsScheduler(String name) {
 9         super(name);
10     }
11 
12     @Override
13     public void schedule(CandidateURI caUri) {
14         // 根據路徑,判斷該url是否有必要抓取。
15         // 這里我們要求路徑必須包含, news.sina.com.cn
16         if (caUri.toString().contains("news.sina.com.cn")) {
17             // 允許爬取
18             super.schedule(caUri);
19         }
20     }
21 }

自己編寫好這個工具類。

編寫好以后,需要將這個類打包到jar包里。(使用class文件

之后,修改modules下的Processor.options文件

將以下內容加入到這個文件中。

org.liky.utils.SinaNewsScheduler|SinaNewsScheduler

前半部分是包.類名,后半部分就是類名,中間用 | 分隔。

 

然后使用jar命令將包打到一起

jar包替換掉原有的包(可以把原有的做個備份留下,防止打包有問題無法恢復)。

重新啟動heritrix,然后修改Profile的配置

此時,再次爬取新浪新聞的時候,只會提取鏈接含有指定字符串的網址,排除很多無關的鏈接。

 

 

總結:

  相對來說,Heritrix工具來爬取網頁數據是相當簡單的,無需寫代碼就可以進行大量的數據收集。

  但是,與我上一篇博客《java實現網絡爬蟲》還是有些許不同:

    首先在自由度上,手寫的代碼可以確認爬取的深度、排除無需爬取的網頁、提取有用的數據;

    其次在內容上很繁雜,很多無效的數據也收集了,而且爬取的網頁會越來越多(當然,有一種修改配置的方法,寫一個java代碼限制爬取的網頁,然后將該class文件放入heritrix的jar包(上述第四個標題)),關於修改源代碼我相信很多新手都會望而止步,而且多寫java代碼來實現網絡爬蟲,益處多多;

    最后在下一步數據分析上,可能多一點麻煩,誰會樂意整理一堆繁雜紛亂的數據呢?

  至此,我還是傾向於java代碼實現網絡爬蟲,而且可以很方便的將數據收集到hadoop中,進行大數據的mapreduce進行分析。

  這樣就相當於一個初步的大數據數據采集了。

    

 


免責聲明!

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



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