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