Heritrix工具實現網絡爬蟲

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

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

------>服務器

目錄網絡

一、Heritrix文件配置ide

二、Heritrix服務器job配置工具

三、如何建立job並執行oop

四、有選擇的爬取網頁post

五、總結測試

----->大數據

 

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進行分析。

  這樣就至關於一個初步的大數據數據採集了。

相關文章
相關標籤/搜索