1. 程式人生 > >手把手教你搭建一個基於Java的分散式爬蟲系統

手把手教你搭建一個基於Java的分散式爬蟲系統

在不用爬蟲框架的情況下,我經過多方學習,嘗試實現了一個分散式爬蟲系統,並且可以將資料儲存到不同地方,類似 MySQL、HBase 等。

805b2b1ff8ae9554deee6fbaa7eef95c13a104b7

因為此係統基於面向介面的編碼思想來開發,所以具有一定的擴充套件性,有興趣的朋友直接看一下程式碼,就能理解其設計思想。

雖然程式碼目前來說很多地方還是比較緊耦合,但只要花些時間和精力,很多都是可抽取出來並且可配置化的。

因為時間的關係,我只寫了京東和蘇寧易購兩個網站的爬蟲,但是完全可以實現不同網站爬蟲的隨機排程,基於其程式碼結構,再寫國美、天貓等的商品爬取,難度不大,但是估計需要花些時間和精力。

因為在解析網頁的資料時,比如我在爬取蘇寧易購商品的價格時,價格是非同步獲取的,並且其 API 是一長串的數字組合,我花了幾個小時的時間才發現其規律,當然也承認,我的經驗不足。

這個系統的設計,除了基本的資料爬取以外,更關注以下幾個方面的問題:

d47e62d2b349aca45e42305ed6714efbe5ed61d9如何實現分散式?同一個程式打包後分發到不同的節點執行時,不影響整體的資料爬取。d47e62d2b349aca45e42305ed6714efbe5ed61d9如何實現 URL 隨機迴圈排程?核心是針對不同的頂級域名做隨機。d47e62d2b349aca45e42305ed6714efbe5ed61d9如何定時向 URL 倉庫中新增種子 URL?達到不讓爬蟲系統停下來的目的。d47e62d2b349aca45e42305ed6714efbe5ed61d9如何實現對爬蟲節點程式的監控,並能夠發郵件報警?d47e62d2b349aca45e42305ed6714efbe5ed61d9如何實現一個隨機 IP 代理庫?目的跟第 2 點有點類似,都是為了反反爬蟲。

下面會針對這個系統來做一個整體的基本介紹,我在程式碼中都有非常詳細的註釋,有興趣的朋友可以參考一下程式碼,最後我會給出一些我爬蟲時的資料分析。

原文連結