Heritrix是一個由Java開發的開源Web爬蟲系統,用來獲取完整的、精確的站點內容的深度複製,web
具備強大的可擴展性,運行開發者任意選擇或擴展各個組件,實現特定的抓取邏輯。算法
1、Heritrix介紹數據庫
Heritrix採用了模塊化的設計,用戶能夠在運行時選擇要用的模塊。它由核心類(core classes)和插件模塊(pluggable modules)構成。微信
核心類能夠配置,但不能被覆蓋,插件模塊能夠由第三方模塊取代。因此咱們就能夠用實現了特定抓取邏輯的第三方模塊來取代默認的插件模塊,從而知足本身的抓取須要。多線程
CrawlController(下載控制器)整個下載過程的總控制者,整個抓取工做的起點,決定整個抓取任務的開始和結束。每一個URI都有一個獨立的線程,它從邊界控制器(Frontier)獲取新的URI,而後傳遞給Processor chains(處理鏈)通過一系列Processor(處理器)處理。架構
2、Heritrix架構框架
中央控制器 CrawlController 是核心組件,決定了整個抓取任務的開始與結束。模塊化
用戶在 Heritrix web UI 控制檯設置抓取任務後,heritrix首先構造XMLSettingsHandler對象,而後調用CrawlController的構造函數,構造一個CrawlController實例並初始化,這樣,CrawlController就具有了運行條件。函數
此時,只需調用 requestCrawlStart()方法就能夠啓動線程池和Frontier,以便向線程池中工做線程提供抓取用的URL連接。工具
Heritrix 3.x 的框架主要分爲 Engine 和 Component
3、一些API
org.archive.crawler.framework.CrawlJob;
org.archive.crawler.postprocessor.CandidatesProcessor;
org.archive.modules.CrawlURI;
等等
抓取任務CrawlOrder類:是整個抓取工做的起點。一次抓取任務包括許多屬性,創建一個任務的方式有不少種,最簡單的一種就是根據默認的order.xml來配置。
中央控制器CrawlController:該類決定着抓取任務的開始和結束。它包含如下幾個組件:
CrawlOrder:該類保存了order.xml的屬性配置;
CrawlScope:決定當前抓取範圍;
ProcessorChainList:處理器鏈;
Frontier:一次抓取任務須要設定一個Frontier,以此來不斷爲其每一個線程提供URI;
ToePool:它是一個線程池,管理了全部在當前任務中抓取過的Host名稱和Server名稱。
中央控制器CrawlControllr的類結構如圖所示:
Frontier連接製造工廠:它表示一種爲線程提供連接的工具,經過一些特定的算法來決定哪一個連接將接下來被送入處理器鏈中,同時,它自己也負責必定的日誌和狀態報告功能。
BdbFrontier類:它是用Berkeley DB 實現的,Berkeley DB 就是一個HashTable,它可以按「key/value」方式保存數據,可以爲應用程序提供可伸縮的、高性能的、有事務保護功能的嵌入式數據庫。
Heritrix的多線程ToeThread和ToePool:要想更快更有效地抓取網頁,必須採用多線程,Heritrix則採用多線程機制,提供了一個標準的線程池ToePool,用於管理全部的抓取線程。
處理器鏈 Processor:包括PreProcessor、Fetcher、Extractor、Writer、PostProcessor五種。
4、應用
做爲爬蟲模塊,爬取數據
掃個紅包吧!
若是個人文章幫助了你,能夠讚揚我 6.66 元給我支持,讓我繼續寫出更好的內容)
(微信) (支付寶)
微信/支付寶 掃一掃