Java爬蟲技術框架之Heritrix框架詳解
Heritrix是一個由Java開發(fā)的開源Web爬蟲系統(tǒng),用來獲取完整的、精確的站點內容的深度復制,
具有強大的可擴展性,運行開發(fā)者任意選擇或擴展各個組件,實現(xiàn)特定的抓取邏輯。
一、Heritrix介紹
Heritrix采用了模塊化的設計,用戶可以在運行時選擇要用的模塊。它由核心類(core classes)和插件模塊(pluggable modules)構成。
核心類可以配置,但不能被覆蓋,插件模塊可以由第三方模塊取代。所以我們就可以用實現(xiàn)了特定抓取邏輯的第三方模塊來取代默認的插件模塊,從而滿足自己的抓取需要。
CrawlController(下載控制器)整個下載過程的總控制者,整個抓取工作的起點,決定整個抓取任務的開始和結束。每個URI都有一個獨立的線程,它從邊界控制器(Frontier)獲取新的URI,然后傳遞給Processor chains(處理鏈)經過一系列Processor(處理器)處理。
二、Heritrix架構
中央控制器 CrawlController 是核心組件,決定了整個抓取任務的開始與結束。
用戶在 Heritrix web UI 控制臺設置抓取任務后,heritrix首先構造XMLSettingsHandler對象,然后調用CrawlController的構造函數(shù),構造一個CrawlController實例并初始化,這樣,CrawlController就具備了運行條件。
此時,只需調用 requestCrawlStart()方法就可以啟動線程池和Frontier,以便向線程池中工作線程提供抓取用的URL鏈接。
Heritrix 3.x 的框架主要分為 Engine 和 Component
三、一些API
org.archive.crawler.framework.CrawlJob;
org.archive.crawler.postprocessor.CandidatesProcessor;org.archive.modules.CrawlURI;
等等
抓取任務CrawlOrder類:是整個抓取工作的起點。一次抓取任務包括許多屬性,建立一個任務的方式有很多種,最簡單的一種就是根據(jù)默認的order.xml來配置。
中央控制器CrawlController:該類決定著抓取任務的開始和結束。它包含以下幾個組件:
CrawlOrder:該類保存了order.xml的屬性配置;
CrawlScope:決定當前抓取范圍;
ProcessorChainList:處理器鏈;
Frontier:一次抓取任務需要設定一個Frontier,以此來不斷為其每個線程提供URI;
ToePool:它是一個線程池,管理了所有在當前任務中抓取過的Host名稱和Server名稱。
中央控制器CrawlControllr的類結構如圖所示:
Frontier鏈接制造工廠:它表示一種為線程提供鏈接的工具,通過一些特定的算法來決定哪個鏈接將接下來被送入處理器鏈中,同時,它本身也負責一定的日志和狀態(tài)報告功能。
BdbFrontier類:它是用Berkeley DB 實現(xiàn)的,Berkeley DB 就是一個HashTable,它能夠按“key/value”方式保存數(shù)據(jù),能夠為應用程序提供可伸縮的、高性能的、有事務保護功能的嵌入式數(shù)據(jù)庫。
Heritrix的多線程ToeThread和ToePool:要想更快更有效地抓取網(wǎng)頁,必須采用多線程,Heritrix則采用多線程機制,提供了一個標準的線程池ToePool,用于管理所有的抓取線程。
處理器鏈 Processor:包括PreProcessor、Fetcher、Extractor、Writer、PostProcessor五種。
四、應用
作為爬蟲模塊,爬取數(shù)據(jù)
到此這篇關于爬蟲技術框架之Heritrix框架詳解的文章就介紹到這了,更多相關爬蟲技術框架 Heritrix內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!
相關文章:
1. ASP常用日期格式化函數(shù) FormatDate()2. Python 操作 MySQL數(shù)據(jù)庫3. Python數(shù)據(jù)相關系數(shù)矩陣和熱力圖輕松實現(xiàn)教程4. 開發(fā)效率翻倍的Web API使用技巧5. bootstrap select2 動態(tài)從后臺Ajax動態(tài)獲取數(shù)據(jù)的代碼6. CSS3中Transition屬性詳解以及示例分享7. js select支持手動輸入功能實現(xiàn)代碼8. 什么是Python變量作用域9. vue使用moment如何將時間戳轉為標準日期時間格式10. python 如何在 Matplotlib 中繪制垂直線
