網絡爬蟲Heritrix1.14.4在MyEclipse中的安裝配置與使用教程

本文主要參考:http://blog.csdn.net/yunshuixiliu/article/details/8627488 

和http://blog.csdn.net/wy_kath/article/details/9385015

非常感謝!!!記下來,以便以後查看~



一、heritrix的安裝配置

   Heritrix具體下載地址如下:
   http://sourceforge.net/projects/archive-crawler/files/archive-crawler%20%28heritrix%201.x%29/

   本實例所用的爲Heritrix1.14.4的源代碼版本,即你只需下載一個文件即可:heritrix-1.14.4-src.zip。 之所以採用源代碼版本,是因爲本實例中,需要對Heritrix 進行一些擴展,以適應本實例的需求。網上教程多是下載兩個文件heritrix-1.14.4.zip和heritrix-1.14.4-src.zip,即費時,又大多無效,按照網上流傳配置辦法很難成功。這裏我已在MyEclipse裏順利配置完成並抓取到所需網頁,下面開始配置流程:


   1、將heritrix-1.14.4-src.zip的壓縮包解壓,目錄中的lib和src是本實例需要的兩個文件夾。 “lib”文件夾下存放的是Heritrix 運行時候所需要的第三方類庫,“src”文件夾下就是Heritrix 的源代碼。

   2、在Eclipse 中打開菜單:File/new/Java Project,並在“Project name”中輸入“Heritrix”,這樣就新建了一個項目名稱叫做Heritrix ,同時將源代碼文件夾下的lib文件夾拖放置新建好的項目工程Heritrix 下。在Elipse裏的項目工程內,找到剛剛拖進去的lib文件夾,把裏面所有的.jar文件選中,右鍵Build Path→ Add to...,這樣便完成了運行庫的添加任務。


   3、將位於Heritrix 源代碼文件夾下的src\ Java \ 的org和st兩個文件夾直接拖進Heritrixj工程的src下。如果當添加完後報錯,只是因爲你的太低版本的Eclipse默認的編譯版本爲1.4,所以要改成1.5或者1.6版本。單擊菜單中的Window ,選擇Preferences之後,展開左邊的Java選項,單擊其中的“Compiler”,將Compiler compliancelevel改成J2EE1.6或1.5。      


   4、將位於解壓後文件夾下的src \ conf\下的所有文件和文件夾拖至Heritrix 工程的src內,在src 內找到heritrix .properties並打開。 該文件是Heritrix  的配置文件,在“heritrix .cmdline.admin= ”後邊添加用戶和密碼,格式如:“admin:admin”,在登錄Heritrix 的管理界面時需要此用戶名和密碼。 在配置文件中還能夠指定Heritrix 管理界面的訪問端口,建議可爲8080端口。

   錯誤1:Access restriction: The type FileURLConnection is not accessible due to restriction on required library C:\Program Files\Java\jdk1.6.0_20\jre\lib\rt.jar,如圖 1 所示。
解決方案:這是 JRE 的訪問限制導致報錯,在 MyHeritrix 工程上右鍵單擊選擇“Build PathConfigure Build Path …”,然後選擇 Library 選項卡,將“JRE System Library”刪除然後重新導入一下即可修復。或者選擇“WindowsPreferencesJavaCompilerErrors/Warnings”找到“Deprecated and restricted API”下的“Forbidden reference (access rules)”,將默認設置“Error”改爲“Warning”或“Ignore”

   錯誤2:這個時候會報錯NullPointerException 的錯誤:這個錯誤的原因是缺少了“tlds-alpha-by-domain.txt”文件,在 heritrix-1.14.4-src\src\resources\org\archive\util 下可以找到該文件,將其拷貝到org.archive.util包(MyHeritrix\src\org\archive\util) 中即可。
圖2. NullPointerException 錯誤


   5、將Heritrix 源代碼文件夾下的src下的其他文件夾,即除conf 和Java兩個文件夾以外的所有文件夾,拖至Heritrix 項目工程下, 

  

   6、至此,Heritrix 已經可以運行起來了。 運行Heritrix ,選擇執行org.archive.crawler包下的heritrix.java文件,以Java application方式運行。然後Heritrix 會在控制檯輸出一段信息,最後是版本號,這就表示Heritrix 已經運行成功了。


   7、啓動瀏覽器並在瀏覽器的地址欄中輸入http://localhost:8080 便可看到Heritrix 的登錄界面。用戶名和密碼處分別輸入在配置文件中,輸入的admin和admin,單擊“Login”按鈕後便能看到Heritrix 的控制檯界面。

到此,Heritrix安裝與配置完成。最好的參考教程:http://www.ibm.com/developerworks/cn/opensource/os-cn-heritrix/index.html?ca=drs-#major2 (很好的錯誤解決轉載  : http://hi.baidu.com/liuqiyuan/item/9127c1103a3a8a001894ecdf

   

   錯誤 3:錯誤具體:
12:32:54.530 EVENT  Starting Jetty/4.2.23
12:32:54.563 WARN!! Delete existing temp dir C:\Users\asus\AppData\Local\Temp\Jetty_127_0_0_1_8080__ for WebApplicationContext[/,jar:file:/F:/workspacetwo/Heritrixfive/webapps/admin.war!/]
12:32:54.566 WARN!! Failed to delete temp dir C:\Users\asus\AppData\Local\Temp\Jetty_127_0_0_1_8080__
12:32:54.585 WARN!! Can't reuse C:\Users\asus\AppData\Local\Temp\Jetty_127_0_0_1_8080__, using C:\Users\asus\AppData\Local\Temp\Jetty_127_0_0_1_8080___1930706384182235396
12:32:54.638 EVENT  Started WebApplicationContext[/,Heritrix Console]
12:32:54.690 WARN!! Failed to start: [email protected]:8080
Exception in thread "main" org.mortbay.util.MultiException[java.net.BindException: Address already in use: JVM_Bind]
at org.mortbay.http.HttpServer.start(HttpServer.java:640)
at org.archive.crawler.SimpleHttpServer.startServer(SimpleHttpServer.java:279)
at org.archive.crawler.Heritrix.startEmbeddedWebserver(Heritrix.java:1236)
at org.archive.crawler.Heritrix.doCmdLineArgs(Heritrix.java:715)
at org.archive.crawler.Heritrix.main(Heritrix.java:556)
Heritrix version: 1.14.4
12:32:54.692 EVENT  Stopped WebApplicationContext[/,Heritrix Console]
12:32:54.693 EVENT  Stopped org.mortbay.http.NCSARequestLog@618d26
12:32:54.693 EVENT  Stopped org.mortbay.jetty.Server@ae506e





它的意思是端口占用了,重新啓動下myeclipse就行了





二  、heritrix的使用教程

學習研究heritrix已經有了一段時間了,想寫一些博文,一來是方便以後自己查閱,二來和廣大博友們分享交流,提高認識。

    本系列文章所用環境:heritrix1.14.4 + myeclipse10

    heritrix1.14.4源碼包下載:http://download.csdn.net/detail/kath_y/5788787     

   一、在myeclipse中安裝配置heritrix                  

    1、新建空的java項目(注意不是WEB項目),命名爲Heritrix;

    2、把heritrix-1.14.4-src\src\java\目錄下的org、st和com文件夾拷貝到Heritrix/src目錄下;

    3、把heritrix-1.14.4\src下的wbapps文件夾拷貝到heritrix目錄下;

    4、右擊heritrix項目,點擊properties ,通過JavaBuildPath,將heritrix-1.14.4-src下的lib目錄下的所有包導入進來;(此時工程目錄下會自動生成一個Referenced Libraries)

    5、解壓縮heritrix-1.14.4目錄下的heritrix-1.14.4.jar文件,把解壓後的所有文件和文件夾(除org、st、com文件夾和heritrix.properties文件外)拷貝到heritrix目錄下;

    6、將heritrix-1.14.4目錄下的conf文件夾拷貝到heritrix目錄下;並將heritrix目錄下的profiles、modules、selftest文件夾移入conf文件夾中;

    7、打開eclipse下的heritrix/conf/heritrix.properties文件,找到"heritrix.cmdline.admin=",修改爲“heritrix.cmdline.admin = admin:admin”;(admin:admin對應登錄時的用戶名:密碼,可以根據自己喜好修改)

    8、Conf/jmxremote.password.template拷貝到heritrix目錄下。改名爲:jmxremote.password,最後再行改成:

                        monitorRole  admin

                        controlRole   admin

    9、找到org.archive.crawler包,運行Heritrix.java中的main函數。

     可能會出現的異常:

       1、在Heritrix.java中出現File URLConnection 紅叉

       解決辦法:依次點擊Window->java->Compiler->Errors/Warnings,將Forbidden reference(access rules)的選項從Error改爲Warning,點擊Apply,點擊OK。

       2、出現的異常......thread-10org.archive.util.ArchiveUtils.<linit>( )TLD list....

         解決辦法:將\heritrix-1.14.4-src\heritrix-1.14.4\src\resources\org\archive\util 下的文本文檔拷貝到heritrix中的src\org\archive\util下;

       最終運行Heritrix.java的正確結果如下:

       

    二、登錄並創建一個簡單的JOB

   1、打開瀏覽器,輸入http://localhost:8080,進入heritrix的登錄頁面

       

    2、點擊Login按鈕後進入heritrix的控制檯界面

        

      ①左邊紅色方框裏介紹的是當前heritrix的一些信息。

      ②右邊藍色框內顯示了當前Java虛擬機的一些狀態,如上圖所示,可以看到當前的堆大小爲4184KB,而已經被使用了3806KB,另外,最大的堆內容可以達到65088KB,也就是在64M左右。在正式抓取的時候,64M的最大內存是不夠用的,一般至少設置爲512M。設置過程如下:右鍵點擊Heritrix->Run As->Run Configurations,進入該頁面,選擇Arguments項,在VM arguments:框下輸入:-Xmx512m,點擊Apply。

        

       重新啓動heritrix,登錄後可以看到最大內存已經改到了520256 KB,即512M。

                      

   3、創建一個Job

   1)點擊控制檯頁面的Jobs按鈕,進入如下界面

            

     在創建頁面有四種創建方式,含義如下:

     ①Based on existing job:以一個已經有的抓取任務爲模板,創建所有抓取屬性和抓取起始URL的列表。

     ②Based on a recovery:在以前的某個任務中,可能設置過一些狀態點,新的任務將從這個設置的狀態點開始。

     ③Based on a profile:專門爲不同的任務設置了一些模板,新建的任務將按照模板來生成。

     ③With defaults:這個最簡單,表示按默認的配置來生成一個任務。

   (2)、點擊選擇最簡單的With Defaults方式,創建一個新的任務

    在Heritrix中,一個任務對應一個描述文件。這個描述文件的默認的名稱爲order.xml。每次創建一個新任務時,都相當於生成了一個order.xml的文件。文件中詳細記錄了Heritrix在運行時需要的所有信息。例如,它包括該用戶所選擇的Processor類、Frontier類、Fetcher類、抓取時線程的最大數量、連接超時的最大等待時間等信息。上面所說的4種創建抓取任務的方式,其實都是在生成一個order.xml文件。其中,第4種With defaults,則是直接拷貝默認的order.xml文件。在所創建的Eclipse工程或是命令行啓動的Heritrix下載包中,該默認的order.xml文件均是放於profiles\default目錄下的。

       關於order.xml的細節,在此還不必深究。接下的學習中會做介紹。

 

         

    在新建任務的名稱上,填入“sina_blog”,表示該抓取任務將抓取新浪博客的信息。在Description中隨意填入字符,然後再在seeds框中,填入新浪博客首頁地址。

    這裏需要解釋一下seeds的含義。所謂seeds,其實指的是抓取任務的起始點。每次的抓取,總是需要從一個起始點開始,在得到這個起始點網頁上的信息後,分析出新的地址加入抓取隊列中,然後循環抓取,重複這樣的過程,直到所有鏈接都分析完畢。在新建任務的過程是可以填多個Seeds作爲起點的,以上只作爲一個示例,所以只填了新浪博客的首頁地址

   (3)、設置抓取時的處理鏈

    在上圖的下邊有一排按鈕:Modules   Submodulers   Settings   Overrides   Submit job,點擊Modules按鈕,進入處理鏈設置頁面。

        

    此時頁面並沒有做配置的Add/Change按鈕及相應的下拉菜單,我們需要在myeclipse中將modules的上一級目錄放到項目的classpath中,過程如下:

    右鍵Heritrix->Run As->Run configuratins.....->classpath->user Entries->Advanced->Add External Folder,找到modules的上一級目錄conf加入即可。

    重新啓動Heritrix項目,登錄並和之前一樣創建job,到Modules頁面可以看到,頁面如下:

       

         此時,頁面中出現了Add/Change的配置按鈕。

         

     從上而下,可以看到,需要配置的內容共有7項,其中CrawlScope和Frontier是兩個最重要的組件。

        ①CrawlScope用於配置當前應該在什麼範圍內抓取網頁鏈接。比如,如果選擇BroadScope,則表示當前抓取的範圍不受限制,但如果選擇了HostScope,則表示抓取的範圍在當前的Host內。我們選擇BroadScope。

         

        ②Frontier則是一個URL的處理器,它將決定下一個被處理的URL是什麼。同時,它還會將經由處理器鏈所解析出來的URL加入到等待處理的隊列中去。我們使用BdbFrontier類來做爲處理器(其實Heritrix也只有這一個可用的Frontier),全權掌管URL的分配。

          

       除了以上兩個組件外,還有5個隊列要配。這五個隊列根據先後的順序,就依次組成了Heritrix的整個處理器鏈。5個隊列的含義分別如下:

      Ⅰ、PreProcessor:這個隊列中,所有的處理器都是用來對抓取時的一些先決條件做判斷的。比如判斷robot.txt的信息等,它是整個處理器鏈的入口。

        

       Ⅱ、Fetcher:從名稱上看,它用於解析網絡傳輸協議,比如解析DNS、HTTP或FTP等。這裏我們主要使用FetchDNS和FetchHTTP兩個類。

         

       Ⅲ、Extractor:它的名字就很好的揭示了它的作用。它主要用是於解析當前獲取到的服務器返回內容,這些內容通常是以字符串形式緩存的。在這個隊列中,包括了一系列的工具,如解析HTML、CSS等。在解析完畢,取出頁面中的URL後,將它們放入隊列中,等待下次繼續抓取。在演示中,使用兩種Extractor,即ExtractorHTTP和ExtractorHTML。

         

       Ⅳ、Writer:主要是用於將所抓取到的信息寫入磁盤。通常寫入磁盤時有兩種形式,一種是採用壓縮的方式寫入,在這裏被稱爲Arc方式,另一種則採用鏡象方式寫入。當然處理起來,鏡象方式要更爲容易一些,因此,我們命名用鏡象Mirror方式。

       

      Ⅴ 、PostProcessor:在整個抓取解析過程結束後,進行一些掃尾的工作,比如將前面Extractor解析出來的URL有條件的加入到待處理隊列中去。   

              

     

      值得一提的是,在處理器鏈的設置過程中,每一個隊列中的處理器都是要分先後順序的,信息的處理流程實際上是不可逆的,因此,在設置時,可以看見在隊列的右側總是有“Up”、“Down”和“Remove”這樣的操作,以幫助能夠正確的設置其順序。

      在設置完Hertrix所需的處理鏈後,仍然還不能夠馬上開始抓取任務,還需對默認的運行時參數做一些修改,以適應真正的需要。

    (4)、設置運行時的參數

       在設置完處理鏈後,在頁面頂部或底部都可以找到如下圖所示的菜單項,單擊“Settings”鏈接,就進入了屬性設置的頁面。

        

      如下圖在屬性設置頁面上有非常多的輸入域,Heritrix在抓取網頁時,這些域是用來對的各個組件的值進行預設。

         

      由於頁面上的內容非常多,使用者可能無法全部瞭解它們的作用。所以Heritrix提供了一個輔助功能,來在最大程度上讓使用者瞭解每個參數的含義。

          

            

      可以看到,在每個屬性的右側都有一個小問號,當單擊問號時,就會彈出一個Javascript的Alert提示框,上面介紹了當前屬性的作用。例如,在上圖中單擊“max-toe-threads”屬性,通過Alert的提示可以知道,它表示的是同時處理URIS的線程的最大數目。默認是100,我們設置爲50。

     當在第一次使用Heritrix時,所需要設置的參數並不多,以默認設置爲主。以下就來介紹一些必須要在第一次使用時就要配置好的參數。

      ①max-toes-threads

      該參數的含義很容易瞭解,它表示Heritrix在運行該抓取任務時,爲任務分配多少個線程進行同步抓取。該參數的默認值爲100,而事實上根據筆者的經驗,在機器配置和網絡均很好的情況下,設置50個線程數就已經足夠使用了。

      ② HTTP-Header

       在HTTP-Header這個屬性域下面,包括兩個屬性值“user-agent”和“from”。默認情況下,這兩個屬性的值如下圖

        

      很明顯,這樣的值是無法完成真實的HTTP協議的模擬的,所以,必須要將值改掉。可以參照下圖:

           

      其實只需要最後的URL和聯繫郵箱格式正確就可以了,可以隨便設置。

    (5)、完成Job的創建

      在完成上述的設置之後,任務就創建成成功了,點擊下圖"Submit job"按鈕提交任務。

       

       提交任務後,會跳轉到如下頁面,表示任務創建成功。

       

       從圖中看到,有一個Pending Jobs,也就是我們之前創建的任務sina_blog。接下來,我們就去啓動我們的任務,開始抓取網頁。

       

      三、啓動Job,抓取網頁

      1、點擊“Console”按鈕回到Console界面,可以看到剛剛創建的任務已經啓動了,等待我們開始它

       

      點擊"Start"按鈕,“Pending”狀態的抓取任務激活,開始抓取網頁。

      2、分析抓取頁面的一些信息。

      當我們點擊"Start"開始抓取網頁後,控制檯界面如下:

       

      界面中Rates框中顯示的是抓取的速度。Mermory框中反應的是java虛擬機的內存狀態。Load框中顯示的是抓取的線程數以及隊列的負載以及一些其他信息。Totals框中則是已經處理的鏈接數和總共分析出的鏈接數的比值,但這個值往往不是準確的,因爲當頁面在不斷被抓取分析時,鏈接的數量也會不斷的增加,因此,這個百分比的數字也在不斷的變化。如圖所示:此時總共抓取到的鏈接數已經達到了78560個,處理了2712個,它的百分比數量爲3%。

      到這裏,已經把Heritrix成功的運行起來,並且抓取了一定的內容。接下來,看一下heritrix是如何存儲抓取下來的內容的。

  

     四、Heritrix的鏡像存儲結構

    由於在前面設置了Writer的類型爲MirrorWriter。因此,磁盤上應該留有了所抓取到的網頁的各種鏡象。那麼,究竟Heritrix是如何存儲下鏡象信息的呢?打開Eclipse的workspace目錄,進入heritrixProject的工程,裏面有一個jobs目錄。進入後,找到以剛纔job的名稱打頭的文件夾,這裏面的內容,就是Heritrix在運行時實時生成的。其中,有一個mirror目錄,進入後,如下圖所示:

     

     其實所謂鏡象方式存儲,就是將URL地址按“/”進行切分,進而按切分出來的層次存儲,比如一個URL地址爲:http://blog.sina.com.cn/index.html

那麼它在mirror目錄中的保存位置就該是blog.sina.com.cn目錄下的index.html文件。

         

     五、停止抓取任務

     當用戶進行某個抓取任務時,有兩種方法會讓任務停止下來。

     1.正常終止

     第一種方法當然就是任務的自然結束,其條件爲所有隊列中的URI都已經被處理過了。此時,任務將自然終止。在“Jobs”面版上會看到任務已經完成,被加入到“Completed jobs”列表中。

     2.強行終止

     當然,任務不可能總是運行完,這可能是因爲對任務的控制不夠,結果抓取了太多不相關的信息,進而造成URL隊列無限制膨脹,無法終止。在這種情況下,就需要強行將任務終止。在Console面版上有如下圖所示的一排鏈接,最後一個“Terminate”鏈接,就是用來終止當前運行的任務。

                                             

      單擊“Terminate”鏈接後,當前在運行的抓取任務就會立即終止,並同樣將任務放置到“Jobs”面版上的“Completed jobs”列表中,只不過在“status”上,它會顯示“Finished - Ended by operator”這樣的提示。

      當然,如果用戶希望關閉Heritrix,並終止所有正在運行的任務,也可以單擊Console面版上的“Shutdown Heritrix software”的鏈接,此時,Heritrix會彈出一個警告,告訴你如果關閉Heritrix,則當前一切正在運行的任務都將被終止。如下圖所示。

                                                       

      如果選擇“I’m sure, shut it down”,則Heritrix的WebUI將會終止,虛擬機進程結束。

     

      六、接下來的目標

        關於heritrix的配置及初次使用,就寫到這裏了,接下來將進行heritrix的部分源碼分析及擴展,改造成自己想要的爬蟲。歡迎各位博友們拍磚交流,指點接下來的研究線路!

       



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章