北京工商大學 劉 雯
近年來,隨著互聯(lián)網的高速發(fā)展,網絡中的數(shù)據呈現(xiàn)出了爆炸式的增長,如何收集整合這些數(shù)據并從中提取出有效的信息,引發(fā)了多方面的挑戰(zhàn)。面對這些挑戰(zhàn),爬蟲技術得到了充分的重視。開源網絡爬蟲框架使得爬蟲的開發(fā)與應用變的高效便捷。各個開源爬蟲框架的實現(xiàn)語言與功能不完全相同,適用場景也不盡相同,需要對比不同開源爬蟲框架之間的優(yōu)劣。
網絡爬蟲是用于互聯(lián)網采集的一種工具,通常又被稱為網絡機器人。在數(shù)據挖掘、信息檢索等領域,網絡爬蟲被廣泛使用,從而獲取最原始的數(shù)據。網絡爬蟲也是信息檢索和搜索引擎的重要組成部分,通過網絡爬蟲采集到的信息,經過搜索引擎的整合,可以更好的用于檢索。
主流爬蟲框架通常由以下部分組成:
1.種子URL庫:URL用于定位互聯(lián)網中的各類資源,如最常見的網頁鏈接,還有常見的文件資源、流媒體資源等。種子URL庫作為網絡爬蟲的入口,標識出爬蟲應該從何處開始運行,指明了數(shù)據來源。
2.數(shù)據下載器:針對不同的數(shù)據種類,需要不同的下載方式。主流爬蟲框架通暢提供多種數(shù)據下載器,用來下載不同的資源,如靜態(tài)網頁下載器、動態(tài)網頁下載器、FTP下載器等。
3.過濾器:對于已經爬取的URL,智能的爬蟲需要對其進行過濾,以提高爬蟲的整體效率。常用的過濾器有基于集合的過濾器、基于布隆過濾的過濾器等。
4.流程調度器:合理的調度爬取流程,也可以提高爬蟲的整體效率。在流程調度器中,通常提供深度優(yōu)先爬取、廣度優(yōu)先爬取、訂制爬取等爬取策略。同時提供單線程、多線程等多種爬取方式。
網絡爬蟲的爬取策略,可以更高效的組織爬蟲的爬取過程。常見的爬取策略包括深度優(yōu)先爬取、深度優(yōu)先爬取、訂制爬取等策略等。
1.深度優(yōu)先爬?。涸摬呗栽谂廊∶總€URL資源后,會隨機爬取改URL對應的所有子URL資源,直到全部子URL資源全部爬取完畢,再爬取下一個URL資源。深度優(yōu)先爬取更關注數(shù)據的深度,希望通過爬取更多的子URL資源,來獲取更深層次的數(shù)據。
2.廣度優(yōu)先爬取:該策略在爬取配個URL資源時,會繼續(xù)爬取同層次的其他URL資源,當本層的URL資源都被爬取完畢后,再爬取下一次URL資源。廣度優(yōu)先爬取更關注數(shù)據的廣度,這樣可以涵蓋更全面的數(shù)據。
3.訂制爬?。涸俸芏鄨鼍爸校疃葍?yōu)先爬取或廣度優(yōu)先爬取無法滿足復雜的數(shù)據采集需求,此時需要訂制爬取策略,如垂直搜索策略,先通過制定關鍵詞進行搜索后,再結合深度優(yōu)先爬取或廣度優(yōu)先爬取,才可以獲取到垂直領域的特定數(shù)據。
從數(shù)據的角度看,有些爬蟲只進行單次的爬取操作,而有些爬蟲需要進行增量爬取,用來積累數(shù)據。
對于單次爬取的網絡爬蟲,實現(xiàn)較為簡單,因為不用考慮過濾去重等操作,所以模塊相對較少。單次爬取的爬蟲主要考慮爬取的效率,有時會通過多線程或多進程等方式提高爬取效率。
對于需要增量爬取的網絡爬蟲。通常需要對URL鏈接、資源內容等進行過濾和去重。每次爬取的時候,需要對比數(shù)據是否重復,并將已經爬取過的內容過濾掉,從而減少冗余數(shù)據的爬取和存儲。實際應用中,增量爬蟲的使用較為廣泛。
爬蟲技術發(fā)展至今,已經十分成熟,同時也產生了很多開源的爬蟲框架,入Nutch、Heritrix、Larbin、Scrapy,這些開源框架的實現(xiàn)語言與功能各不相同,以下是這幾款開源爬蟲框架的比較與分析。
Nutch是一個比較大型的開源框架,也是隸屬于Apache基金會的一個開源項目。Nutch最初服務于Lucene項目,Lucene是一個完整的搜索引擎框架,其中Nutch提供數(shù)據爬取服務。因為Lucene是一個通用的搜索引擎框架,所以Nutch在設計之初也主要用于通用數(shù)據的爬取。在滿足通用需求的同時,Nutch犧牲了一些定制化開發(fā)的特性。
優(yōu)點:Nutch適用于各種規(guī)模的爬取任務,底層可以和Hadoop平臺對接,提供分布式的爬取功能,同時支持分布式的調度及分布式的存儲。為了擴展各類定制化功能,Nutch設計了插件框架,可以通過添加插件,來實現(xiàn)更加復雜的爬取功能。
缺點:雖然有插件框架,但是Nutch的定制化開發(fā)成本依舊較高。 在使用默認的配置過濾文件是,是不抓取動態(tài)網頁的,要想爬取動態(tài)網頁需要修改過濾規(guī)則。
Heritrix是基于Java語言的爬蟲框架,因其可擴展型和豐富的各類組件而著稱。但配置相對繁瑣,所以學習成本偏高。Heritrix提供了多種下載器,用于下載網頁、流媒體等多種類型的數(shù)據。Heritrix還提供了圖形界面用來管理爬蟲,可以通過網頁來啟動貨控制各類爬蟲。
優(yōu)點:Heritrix的爬蟲定制參數(shù)多包括,可設置輸出日志、可設置多線程采集模式、可設置下載速度上限等 開發(fā)者可以通過修改組件的參數(shù),來高效的修改爬蟲功能 。
缺點:Heritrix很難實現(xiàn)分布式爬取,因為多個單獨爬蟲之間,無法合作完成爬取任務,可擴展性較差。在爬取失敗時,也缺乏重試等機制,導致開發(fā)者需要做很多額外工作來彌補這些設計上的缺失。
不同于Nutch框架,僅憑Heritrix不能完成搜索引擎的全部工作,而只能完成爬蟲階段的爬取工作。
Larbin是一個基于C++語言的爬蟲框架。Larbin提供了相對簡單單十分易用的爬蟲功能。單機Larbin爬蟲可以每天獲取百萬量級的網頁。單Larbin不提供網頁解析服務,也不考慮內容的存儲及處理。如果像使用Larbin進行大型系統(tǒng)的實現(xiàn),則需要自行開發(fā)相應的其他組件。
優(yōu)點:指定入口URL后,可以自動擴展,甚至整個網站鏡像;支持通過后綴名對抓取網頁進行過濾;只保存原始網頁;利用C++開發(fā),非常高效。
缺點:只有網頁下載器,而沒有網頁解析器。不支持分布式爬取。沒有自動重試功能。該項目在2003年后停止開發(fā)維護。
Scrapy是基于python語言開發(fā)的爬蟲框架,由于它的輕量化設計和簡單易用,而廣泛受到開發(fā)者的歡迎。
優(yōu)點:簡單易用:只需編寫爬取規(guī)則,剩下由scrapy完成易擴展:擴展性設計,支持插件,無需改動核心代碼可移植性:基于Linux、Windows、Mac、BSD開發(fā)和運行設計。
缺點:單機多線程實現(xiàn),不支持分布式。數(shù)據存儲方案支持Local filesystem、FTP、S3、Standard output,默認無分布式存儲解決方案默認中間過程網頁不會保存,只保存抽取結果。
本文首先介紹了URL鏈接庫、文檔內容模塊、文檔解析模塊等爬蟲基礎概念,然后對比分析了Nutch、Heritrix、Larbin、Scrapy等主流開源爬蟲框架。不同的爬蟲開源框架的實現(xiàn)語言和功能不同,適用的場景也不盡相同,需要在實際應用中選擇合適的開源爬蟲框架。
[1]劉瑋瑋.搜索引擎中主題爬蟲的研究與實現(xiàn)[D].南京理工大學,2006.
[2]詹恒飛,楊岳湘,方宏.Nutch分布式網絡爬蟲研究與優(yōu)化[J].計算機科學與探索,2011,5(01):68-74.
[3]安子建.基于Scrapy框架的網絡爬蟲實現(xiàn)與數(shù)據抓取分析[D].吉林大學,2017.
[4]周立柱,林玲.聚焦爬蟲技術研究綜述[J].計算機應用,2005(09):1965-1969.
[5]楊定中,趙剛,王泰.網絡爬蟲在Web信息搜索與數(shù)據挖掘中應用[J].計算機工程與設計,2009,30(24):5658-5662.