基於java的分散式爬蟲

tianxiaoxu發表於2018-07-06

分類

分散式網路爬蟲包含多個爬蟲,每個爬蟲需要完成的任務和單個的爬行器類似,它們從網際網路上下載網頁,並把網頁儲存在本地的磁碟,從中抽取URL並沿著這些URL的指向繼續爬行。由於並行爬行器需要分割下載任務,可能爬蟲會將自己抽取的URL傳送給其他爬蟲。這些爬蟲可能分佈在同一個區域網之中,或者分散在不同的地理位置。

根據爬蟲的分散程度不同,可以把分散式爬行器分成以下兩大類:

1、基於區域網分散式網路爬蟲:這種分散式爬行器的所有爬蟲在同一個區域網裡執行,通過高速的網路連線相互通訊。這些爬蟲通過同一個網路去訪問外部網際網路,下載網頁,所有的網路負載都集中在他們所在的那個區域網的出口上。由於區域網的頻寬較高,爬蟲之間的通訊的效率能夠得到保證;但是網路出口的總頻寬上限是固定的,爬蟲的數量會受到區域網出口頻寬的限制。

2、基於廣域網分散式網路爬蟲:當並行爬行器的爬蟲分別執行在不同地理位置(或網路位置),我們稱這種並行爬行器為分散式爬行器。例如,分散式爬行器的爬蟲可能位於中國,日本,和美國,分別負責下載這三地的網頁;或者位於CHINANET,CERNET,CEINET,分別負責下載這三個網路的中的網頁。分散式爬行器的優勢在於可以子在一定程度上分散網路流量,減小網路出口的負載。如果爬蟲分佈在不同的地理位置(或網路位置),需要間隔多長時間進行一次相互通訊就成為了一個值得考慮的問題。爬蟲之間的通訊頻寬可能是有限的,通常需要通過網際網路進行通訊。

大型分散式網路爬蟲體系結構圖

image

分散式網路爬蟲是一項十分複雜系統。需要考慮很多方面因素。效能可以說是它這重要的指標。當然硬體層面的資源也是必須的。

架構

下面是專案的總體架構,第一個版本基於此方案來做。

上面的web層包括:控制檯、基本許可權、監控展示等,還可以根據需要再一步進行擴充套件。

核心層由控制者統一排程,將任務發給工人佇列中的工人進行爬取操作。各個結點動態的向監控模組傳送模組狀態等資訊,統一由展示層展示。

0.1版本架構圖

專案目標

眾推,開源版的今日頭條!

基於hadoop思維的分散式網路爬蟲。

目前已經將fourinone、jeesite、webmagic整合進來,並且進一步進行改進。想最終做成一個基於設計器的動態可配置的分散式爬蟲系統,這個是第一階段的目標。

專案目前情況

目前專案進展情況:

1、sourceer,可以接入多種資料來源,介面已經定義(加入builder封裝,可以使用簡單爬蟲)。

2、web架構工程(web工程上傳並測試成功,許可權、基礎框架改造,匯入等已經錄成視訊,刪除activiti,刪除cms部分)。

3、分散式框架研究(分散式專案分包,新增部分註釋,測試單機單工人爬取)。

4、外掛化整合。

5、文章等各種去重方式及演算法(目前已實現bloomfilter,指紋演算法去重,已經實現simhash,分詞演算法(ansj))。

6、分類器測試(bayes,文字分類單機測試成功)。

專案地址:

(分散式爬蟲)http://git.oschina.net/zongtui/zongtui-webcrawler

(去重過濾器)https://git.oschina.net/zongtui/zongtui-filter

(文字分類器)https://git.oschina.net/zongtui/zongtui-classifier

(文件目錄)https://git.oschina.net/zongtui/zongtui-doc

專案介面:

啟動jetty,目前皮膚暫時還未換。

image

總結

目前專案正在進一步完善當中,希望能得到你更多的意見!

相關文章