本書介紹了網絡爬蟲開發中的關鍵問題與Java實現。主要包括從互聯網獲取信息與提取信息和對Web信息挖掘等內容。本書在介紹基本原理的同時注重輔以具體代碼實現來幫助讀者加深理解,書中部分代碼甚至可以直接使用。
本書適用于有Java程序設計基礎的開發人員。同時也可以作為計算機相關專業本科生或研究生的參考教程。
大多數網絡爬蟲的開發原理與技巧在專業的公司內部都秘而不宣,至今仍然缺少理論與實踐相結合的專門介紹網絡爬蟲的書籍。本書嘗試理論與實踐相結合,深入透徹地講解網絡爬蟲的原理并且輔以相關代碼作為參考。
羅剛,計算機軟件碩士,畢業于吉林工業大學。2005年創立北京盈智星科技發展有限公司,2008年聯合創立上海數聚軟件公司。獵兔搜索創始人,當前獵兔搜索在北京、上海以及石家莊均設有研發部。他帶領獵兔搜索技術開發團隊先后開發出獵兔中文分詞系統、獵兔文本挖掘系統,智能垂直搜索系統以及網絡信息監測系統等,實現互聯網信息的采集、過濾、搜索和實時監測,其開發的搜索軟件日用戶訪問量萬次以上。
第2章 分布式爬蟲
隨著互聯網技術的發展以及風起云涌的云計算浪潮,爬蟲技術也逐漸向分布式方向發展。比如,Google的爬蟲就是使用成千上萬臺小型機和微機進行合作,完成分布式抓取工作的。分布式技術不僅可以解決IT運營的成本,還可以解決爬蟲效率問題,尤其是當今云計算的熱潮,更把分布式推向了極致。
2.1 設計分布式爬蟲
把抓取任務分布到不同的節點主要是為了抓取性能與可擴展性,也可以使用物理分布的爬蟲系統,讓每個爬蟲節點抓取靠近它的網站。例如,北京的爬蟲節點抓取北京的網站,上海的爬蟲節點抓取上海的網站,電信網絡中的爬蟲節點抓取托管在電信的網站,聯通網絡中的爬蟲節點抓取托管在聯通的網站。
此外,還需要考慮容錯。如果一個節點X崩潰(或優雅地離開),我們可以通過查找任務緩存,知道分配給它哪些任務。這次X的任務要由其他的節點來重新執行。
2.1.1 分布式與云計算
分布式技術是一種基于網絡的計算機處理技術,與集中式相對應。近些年來,由于個人計算機的性能得到極大的提高及其使用的普及,使得將處理任務分布到網絡上的所有計算機成為可能。分布式計算是和集中式計算相對立的概念,分布式計算的數據可以分布在很大區域去完成。
在分布式網絡中,數據的存儲和處理都是在本地工作站進行的。數據輸出可以打印,也可以保存在軟盤上。通過網絡能夠更快、更便捷地訪問數據。因為每臺計算機都能夠存儲和處理數據,所以不要求服務器的功能十分強大,其價格也就不必過于昂貴。這種類型的網絡可以適應用戶的各種需要,同時允許他們共享網絡的數據、資源和服務。在分布式網絡中使用的計算機既能夠作為獨立的系統使用,也可以把它們連接在一起獲得更強大的網絡功能。
分布式計算的優點是可以快速訪問、多用戶使用。每臺計算機可以訪問系統內其他計算機的信息文件,系統設計上具有更大的靈活性。既可為獨立計算機的地區用戶的特殊需求服務,也可為聯網的企業需求服務,實現系統內不同計算機之間的通信,每臺計算機都可以擁有和保持所需要的最大數據和文件,減少了數據傳輸的成本和風險。為分散地區和中心辦公室雙方提供更迅速的信息通信和處理方式,為每個分散的數據庫提供作用域,數據存儲于許多存儲單元中,但任何用戶都可以進行全局訪問,使故障的不利影響最小化,以較低的成本來滿足企業的特定要求。
云計算(Cloud Computing)是分布式處理(Distributed Computing)、并行處理(Parallel Computing)和網格計算(Grid Computing)的發展,或者說是這些計算機科學概念的商業實現。
云計算的基本原理是,通過使計算任務分布在大量的分布式計算機上,而非本地計算機或遠程服務器中,企業數據中心的運行將與互聯網更相似。這使得企業能夠將資源切換到需要的應用上,從而根據需求訪問計算機和存儲系統。
這可是一種革命性的舉措,打個比方,就好比是從古老的單臺發電機模式轉向了電廠集中供電的模式。它意味著計算能力也可以作為一種商品進行流通,就像煤氣、水電一樣,使用方便,費用低廉。最大的不同在于,它是通過互聯網進行傳輸的。
云計算的藍圖已經呼之欲出:在未來,只需要一臺筆記本或者一個手機,就可以通過網絡服務來實現我們需要的一切,甚至包括超級計算這樣的任務。從這個角度而言,最終用戶才是云計算的真正擁有者。
云計算的應用包含這樣一種思想,把力量聯合起來,給其中的每一個成員使用。
目前,PC依然是我們日常工作生活中的核心工具--我們用PC處理文檔、存儲資料,用電子郵件或U盤與他人分享信息。如果PC硬盤壞了,我們會因為資料丟失而束手無策。
而在云計算時代,"云"會替我們做存儲和計算的工作。"云"就是計算機群,每一群都包括幾十萬臺,甚至上百萬臺計算機。"云"的好處還在于,其中的計算機可以隨時更新,保證"云"長生不老。Google就有好幾個這樣的"云",其他IT巨頭,如微軟、雅虎、亞馬遜(Amazon)也有或正在建設這樣的"云"。
屆時,我們只需要一臺能上網的電腦,不需關心存儲或計算發生在哪朵"云"上,一旦有需要,我們可以在任何地點用任何設備,如電腦、手機等,快速地計算和找到這些資料。我們再也不用擔心資料會丟失了。
云計算是虛擬化(Virtualization)、效用計算(Utility Computing)、IaaS(基礎設施即服務)、PaaS(平臺即服務)、SaaS(軟件即服務)等概念混合演進并躍升的結果。云計算的特點如下:
* 超大規模。Google云計算已經擁有100多萬臺服務器,Amazon、IBM、微軟、Yahoo等的"云"均擁有幾十萬臺服務器。企業私有云一般擁有數百至上千臺服務器。"云"能賦予用戶前所未有的計算能力。
* 虛擬化。云計算支持用戶在任意位置、使用各種終端獲取應用服務。所請求的資源來自"云",而不是固定的、有形的實體。應用在"云"中某處運行,但實際上用戶無需了解、也不用擔心應用運行的具體位置。只需要一臺筆記本或者一個手機,就可以通過網絡服務來實現我們需要的一切,甚至包括超級計算這樣的任務。
* 高可靠性。"云"使用了數據多副本容錯、計算節點同構可互換等措施來保障服務的高可靠性,使用云計算比使用本地計算機可靠。
* 通用性。云計算不針對特定的應用,在"云"的支撐下可以構造出千變萬化的應用,同一個"云"可以同時支撐不同的應用運行。
* 高可擴展性。"云"的規模可以動態伸縮,以滿足應用和用戶規模增長的需要。
* 按需服務。"云"是一個龐大的資源池,可以按需購買;云可以像自來水、電、煤氣那樣計費。
* 極其廉價。由于"云"的特殊容錯措施可以采用極其廉價的節點來構成云,"云"的自動化集中式管理使得大量企業無需負擔日益高昂的數據中心管理成本,"云"的通用性使資源的利用率較之傳統系統大幅提升,因此用戶可以充分享受"云"的低成本優勢,通常只要花費幾百美元、幾天時間就能完成以前需要數萬美元、數月時間才能完成的任務。
……