一、什么是網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲是一個自動提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成。傳統(tǒng)爬蟲從一個或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的一定停止條件。
網(wǎng)絡(luò)爬蟲流程
二、爬蟲的分類:
1、通用網(wǎng)絡(luò)爬蟲:通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲(Scalable Web Crawler),爬行對象從一些種子 URL 擴(kuò)充到整個 Web,主要為門戶站點(diǎn)搜索引擎和大型 Web 服務(wù)提供商采集數(shù)據(jù)。 由于商業(yè)原因,它們的技術(shù)細(xì)節(jié)很少公布出來。 這類網(wǎng)絡(luò)爬蟲的爬行范圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求相對較低,同時由于待刷新的頁面太多,通常采用并行工作方式,但需要較長時間才能刷新一次頁面。 雖然存在一定缺陷,通用網(wǎng)絡(luò)爬蟲適用于為搜索引擎搜索廣泛的主題,有較強(qiáng)的應(yīng)用價值。
2、聚焦網(wǎng)絡(luò)爬蟲:聚焦網(wǎng)絡(luò)爬蟲(Focused Crawler),又稱主題網(wǎng)絡(luò)爬蟲(Topical Crawler),是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)頁面的網(wǎng)絡(luò)爬蟲[8]。 和通用網(wǎng)絡(luò)爬蟲相比,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,保存的頁面也由于數(shù)量少而更新快,還可以很好地滿足一些特定人群對特定領(lǐng)域信息的需求。
3、增量式網(wǎng)絡(luò)爬蟲:增量式網(wǎng)絡(luò)爬蟲(Incremental Web Crawler)是 指 對 已 下 載 網(wǎng) 頁 采 取 增 量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面。 和周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲相比,增量式爬蟲只會在需要的時候爬行新產(chǎn)生或發(fā)生更新的頁面 ,并不重新下載沒有發(fā)生變化的頁面,可有效減少數(shù)據(jù)下載量,及時更新已爬行的網(wǎng)頁,減小時間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實現(xiàn)難度。增量式網(wǎng)絡(luò)爬蟲的體系結(jié)構(gòu)[包含爬行模塊、排序模塊、更新模塊、本地頁面集、待爬行 URL 集以及本地頁面URL 集。
4、Deep Web 爬蟲:Web 頁面按存在方式可以分為表層網(wǎng)頁(Surface Web)和深層網(wǎng)頁(Deep Web,也稱 Invisible Web Pages 或 Hidden Web)。 表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引的頁面,以超鏈接可以到達(dá)的靜態(tài)網(wǎng)頁為主構(gòu)成的 Web 頁面。Deep Web 是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的 Web 頁面。例如那些用戶注冊后內(nèi)容才可見的網(wǎng)頁就屬于 Deep Web。 2000 年 Bright Planet 指出:Deep Web 中可訪問信息容量是 Surface Web 的幾百倍,是互聯(lián)網(wǎng)上最大、發(fā)展最快的新型信息資源。
網(wǎng)絡(luò)爬蟲的分類
三、爬蟲抓取目標(biāo)分類:基于目標(biāo)網(wǎng)頁特征的爬蟲所抓取、存儲并索引的對象一般為網(wǎng)站或網(wǎng)頁。根據(jù)種子樣本獲取方式可分為:
1、基于目標(biāo)網(wǎng)頁特征:
1.1、預(yù)先給定的初始抓取種子樣本;
1.2、預(yù)先給定的網(wǎng)頁分類目錄和與分類目錄對應(yīng)的種子樣本,如Yahoo!分類結(jié)構(gòu)等;
1.3、通過用戶行為確定的抓取目標(biāo)樣例,分為:
Ⅰ、用戶瀏覽過程中顯示標(biāo)注的抓取樣本;
Ⅱ、通過用戶日志挖掘得到訪問模式及相關(guān)樣本。
其中,網(wǎng)頁特征可以是網(wǎng)頁的內(nèi)容特征,也可以是網(wǎng)頁的鏈接結(jié)構(gòu)特征,等等。
2、基于目標(biāo)數(shù)據(jù)模式:基于目標(biāo)數(shù)據(jù)模式的爬蟲針對的是網(wǎng)頁上的數(shù)據(jù),所抓取的數(shù)據(jù)一般要符合一定的模式,或者可以轉(zhuǎn)化或映射為目標(biāo)數(shù)據(jù)模式。
3、基于領(lǐng)域概念:另一種描述方式是建立目標(biāo)領(lǐng)域的本體或詞典,用于從語義角度分析不同特征在某一主題中的重要程度。
爬蟲網(wǎng)頁搜索策略
四、網(wǎng)頁搜索策略:
網(wǎng)頁的抓取策略可以分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種。深度優(yōu)先在很多情況下會導(dǎo)致爬蟲的陷入(trapped)問題,目前常見的是廣度優(yōu)先和最佳優(yōu)先方法。
1、廣度優(yōu)先搜索
廣度優(yōu)先搜索策略是指在抓取過程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。該算法的設(shè)計和實現(xiàn)相對簡單。在目前為覆蓋盡可能多的網(wǎng)頁,一般使用廣度優(yōu)先搜索方法。也有很多研究將廣度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中。其基本思想是認(rèn)為與初始URL在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大。另外一種方法是將廣度優(yōu)先搜索與網(wǎng)頁過濾技術(shù)結(jié)合使用,先用廣度優(yōu)先策略抓取網(wǎng)頁,再將其中無關(guān)的網(wǎng)頁過濾掉。這些方法的缺點(diǎn)在于,隨著抓取網(wǎng)頁的增多,大量的無關(guān)網(wǎng)頁將被下載并過濾,算法的效率將變低。
2、最佳優(yōu)先搜索
最佳優(yōu)先搜索策略按照一定的網(wǎng)頁分析算法,預(yù)測候選URL與目標(biāo)網(wǎng)頁的相似度,或與主題的相關(guān)性,并選取評價最好的一個或幾個URL進(jìn)行抓取。它只訪問經(jīng)過網(wǎng)頁分析算法預(yù)測為“有用”的網(wǎng)頁。存在的一個問題是,在爬蟲抓取路徑上的很多相關(guān)網(wǎng)頁可能被忽略,因為最佳優(yōu)先策略是一種局部最優(yōu)搜索算法。因此需要將最佳優(yōu)先結(jié)合具體的應(yīng)用進(jìn)行改進(jìn),以跳出局部最優(yōu)點(diǎn)。將在第4節(jié)中結(jié)合網(wǎng)頁分析算法作具體的討論。研究表明,這樣的閉環(huán)調(diào)整可以將無關(guān)網(wǎng)頁數(shù)量降低30%~90%。
3、深度優(yōu)先搜索
深度優(yōu)先搜索策略從起始網(wǎng)頁開始,選擇一個URL進(jìn)入,分析這個網(wǎng)頁中的URL,選擇一個再進(jìn)入。如此一個鏈接一個鏈接地抓取下去,直到處理完一條路線之后再處理下一條路線。深度優(yōu)先策略設(shè)計較為簡單。然而門戶網(wǎng)站提供的鏈接往往最具價值,PageRank也很高,但每深入一層,網(wǎng)頁價值和PageRank都會相應(yīng)地有所下降。這暗示了重要網(wǎng)頁通常距離種子較近,而過度深入抓取到的網(wǎng)頁卻價值很低。同時,這種策略抓取深度直接影響著抓取命中率以及抓取效率,對抓取深度是該種策略的關(guān)鍵。相對于其他兩種策略而言。此種策略很少被使用。
常見爬蟲匯總
五、常見爬蟲匯總:
1、RBSE (Eichmann,1994)是第一個發(fā)布的爬蟲。它有兩個基礎(chǔ)程序。第一個是“spider”,抓取隊列中的內(nèi)容到一個關(guān)系數(shù)據(jù)庫中,第二個程序是“mite”,是一個修改后的www的ASCII瀏覽器,負(fù)責(zé)從網(wǎng)絡(luò)上下載頁面。
2、WebCrawler(Pinkerton,1994)是第一個公開可用的用來建立全文索引的一個子程序,他使用庫www來下載頁面;另外一個程序使用廣度優(yōu)先來解析獲取URL并對其排序;它還包括一個根據(jù)選定文本和查詢相似程度爬行的實時爬蟲。
3、World Wide Web Worm (McBryan, 1994)是一個用來為文件建立包括標(biāo)題和URL簡單索引的爬蟲。索引可以通過grep式的Unix命令來搜索。
4、Google Crawler (Brin and Page, 1998)用了一些細(xì)節(jié)來描述,但是這些細(xì)節(jié)僅僅是關(guān)于使用C++和Python編寫的、一個早期版本的體系結(jié)構(gòu)。因為文本解析就是文檢索和URL抽取的過程,所以爬蟲集成了索引處理。這里擁有一個URL??捣?wù)器,用來給幾個爬蟲程序發(fā)送要抓取的URL列表。在文本解析的時候,新發(fā)現(xiàn)的URL傳送給URL??捣?wù)器并檢測這個URL是不是已經(jīng)存在,如果不存在的話,該URL就加入到URL??捣?wù)器中。
5、CobWeb (da Silva et al., 1999)使用了一個中央“調(diào)度者”和一系列的“分布式的搜集者”。搜集者解析下載的頁面并把找到的URL發(fā)送給調(diào)度者,然后調(diào)度者反過來分配給搜集者。調(diào)度者使用深度優(yōu)先策略,并且使用平衡禮貌策略來避免服務(wù)器超載。爬蟲是使用Perl語言編寫的。
6、Mercator (Heydon and Najork, 1999; Najork and Heydon, 2001)是一個分布式的,模塊化的使用java編寫的網(wǎng)絡(luò)爬蟲。它的模塊化源自于使用可互換的的“協(xié)議模塊”和“處理模塊”。協(xié)議模塊負(fù)責(zé)怎樣獲取網(wǎng)頁(例如使用HTTP),處理模塊負(fù)責(zé)怎樣處理頁面。標(biāo)準(zhǔn)處理模塊僅僅包括了解析頁面和抽取URL,其他處理模塊可以用來檢索文本頁面,或者搜集網(wǎng)絡(luò)數(shù)據(jù)。
7、WebFountain (Edwards et al., 2001)是一個與Mercator類似的分布式的模塊化的爬蟲,但是使用C++編寫的。它的特點(diǎn)是一個管理員機(jī)器控制一系列的螞蟻機(jī)器。經(jīng)過多次下載頁面后,頁面的變化率可以推測出來,這時,一個非線性的方法必須用于求解方程以獲得一個最大的新鮮度的訪問策略。作者推薦在早期檢索階段使用這個爬蟲,然后用統(tǒng)一策略檢索,就是所有的頁面都使用相同的頻率訪問。
8、PolyBot [Shkapenyuk and Suel, 2002]是一個使用C++和Python編寫的分布式網(wǎng)絡(luò)爬蟲。它由一個爬蟲管理者,一個或多個下載者,一個或多個DNS解析者組成。抽取到的URL被添加到硬盤的一個隊列里面,然后使用批處理的模式處理這些URL。平衡禮貌方面考慮到了第二、三級網(wǎng)域(例如www.seokuaipai.cn 和 www2.seokuaipai.cn 都是三級網(wǎng)域),因為第三級網(wǎng)域通常也會保存在同一個網(wǎng)絡(luò)服務(wù)器上。
9、WebRACE (Zeinalipour-Yazti and Dikaiakos, 2002)是一個使用java實現(xiàn)的,擁有檢索模塊和緩存模塊的爬蟲,它是一個很通用的稱作eRACE的系統(tǒng)的一部分。系統(tǒng)從用戶得到下載頁面的請求,爬蟲的行為有點(diǎn)像一個聰明的代理服務(wù)器。系統(tǒng)還監(jiān)視訂閱網(wǎng)頁的請求,當(dāng)網(wǎng)頁發(fā)生改變的時候,它必須使爬蟲下載更新這個頁面并且通知訂閱者。WebRACE最大的特色是,當(dāng)大多數(shù)的爬蟲都從一組URL開始的時候,WebRACE可以連續(xù)地的接收抓取開始的URL地址。
10、Ubicrawer (Boldi et al., 2004)是一個使用java編寫的分布式爬蟲。它沒有中央程序。它有一組完全相同的代理組成,分配功能通過主機(jī)前后一致的散列計算進(jìn)行。這里沒有重復(fù)的頁面,除非爬蟲崩潰了(然后,另外一個代理就會接替崩潰的代理重新開始抓取)。爬蟲設(shè)計為高伸縮性和允許失敗的。
11、FAST Crawler (Risvik and Michelsen, 2002) 是一個分布式的爬蟲,在Fast Search&Transfer中使用,關(guān)于其體系結(jié)構(gòu)的一個大致的描述可以在[citation needed]找到。
12、Labrador,一個工作在開源項目Terrier Search Engine上的非開源的爬蟲。
13、TeezirCrawler是一個非開源的可伸縮的網(wǎng)頁抓取器,在Teezir上使用。該程序被設(shè)計為一個完整的可以處理各種類型網(wǎng)頁的爬蟲,包括各種JavaScript和HTML文檔。爬蟲既支持主題檢索也支持非主題檢索。
14、Spinn3r, 一個通過博客構(gòu)建Tailrank.com反饋信息的爬蟲。 Spinn3r是基于java的,它的大部分的體系結(jié)構(gòu)都是開源的。
15、HotCrawler,一個使用c語言和php編寫的爬蟲。
16、ViREL Microformats Crawler,搜索公眾信息作為嵌入到網(wǎng)頁的一小部分。
除了上面列出的幾個特定的爬蟲結(jié)構(gòu)以外,還有Cho (Cho and Garcia-Molina, 2002)和Chakrabarti (Chakrabarti, 2003)發(fā)布的一般的爬蟲體系結(jié)構(gòu)。
開源爬蟲匯總
六、開源爬蟲匯總:
1、DataparkSearch是一個在GNU GPL許可下發(fā)布的爬蟲搜索引擎。
2、GNU Wget是一個在GPL許可下,使用C語言編寫的命令行式的爬蟲。它主要用于網(wǎng)絡(luò)服務(wù)器和FTP服務(wù)器的鏡像。
3、Heritrix是一個互聯(lián)網(wǎng)檔案館級的爬蟲,設(shè)計的目標(biāo)為對大型網(wǎng)絡(luò)的大部分內(nèi)容的定期存檔快照,是使用java編寫的。
4、Ht://Dig在它和索引引擎中包括了一個網(wǎng)頁爬蟲。
5、HTTrack用網(wǎng)絡(luò)爬蟲創(chuàng)建網(wǎng)絡(luò)站點(diǎn)鏡像,以便離線觀看。它使用C語言編寫,在GPL許可下發(fā)行。
6、ICDL Crawler是一個用C++編寫,跨平臺的網(wǎng)絡(luò)爬蟲。它僅僅使用空閑的CPU資源,在ICDL標(biāo)準(zhǔn)上抓取整個站點(diǎn)。
7、JSpider是一個在GPL許可下發(fā)行的,高度可配置的,可定制的網(wǎng)絡(luò)爬蟲引擎。
8、LLarbin由Sebastien Ailleret開發(fā);
9、Webtools4larbin由Andreas Beder開發(fā);
10、Methabot是一個使用C語言編寫的高速優(yōu)化的,使用命令行方式運(yùn)行的,在2-clause BSD許可下發(fā)布的網(wǎng)頁檢索器。它的主要的特性是高可配置性,模塊化;它檢索的目標(biāo)可以是本地文件系統(tǒng),HTTP或者FTP。
11、Nutch是一個使用java編寫,在Apache許可下發(fā)行的爬蟲。它可以用來連接Lucene的全文檢索套件;
12、Pavuk是一個在GPL許可下發(fā)行的,使用命令行的WEB站點(diǎn)鏡像工具,可以選擇使用X11的圖形界面。與wget和httprack相比,他有一系列先進(jìn)的特性,如以正則表達(dá)式為基礎(chǔ)的文件過濾規(guī)則和文件創(chuàng)建規(guī)則。
13、WebVac是斯坦福WebBase項目使用的一個爬蟲。
14、WebSPHINX(Miller and Bharat, 1998)是一個由java類庫構(gòu)成的,基于文本的搜索引擎。它使用多線程進(jìn)行網(wǎng)頁檢索,html解析,擁有一個圖形用戶界面用來設(shè)置開始的種子URL和抽取下載的數(shù)據(jù);
15、WIRE-網(wǎng)絡(luò)信息檢索環(huán)境(Baeza-Yates 和 Castillo, 2002)是一個使用C++編寫,在GPL許可下發(fā)行的爬蟲,內(nèi)置了幾種頁面下載安排的策略,還有一個生成報告和統(tǒng)計資料的模塊,所以,它主要用于網(wǎng)絡(luò)特征的描述;
16、LWP:RobotUA(Langheinrich,2004)是一個在Perl5許可下發(fā)行的,可以優(yōu)異的完成并行任務(wù)的 Perl類庫構(gòu)成的機(jī)器人。
17、Web Crawler是一個為.net準(zhǔn)備的開放源代碼的網(wǎng)絡(luò)檢索器(C#編寫)。
18、Sherlock Holmes收集和檢索本地和網(wǎng)絡(luò)上的文本類數(shù)據(jù)(文本文件,網(wǎng)頁),該項目由捷克門戶網(wǎng)站中樞(Czech web portal Centrum)贊助并且主用商用于這里;它同時也使用在Onet.pl。
19、YaCy是一個基于P2P網(wǎng)絡(luò)的免費(fèi)的分布式搜索引擎(在GPL許可下發(fā)行);
20、Ruya是一個在廣度優(yōu)先方面表現(xiàn)優(yōu)秀,基于等級抓取的開放源代碼的網(wǎng)絡(luò)爬蟲。在英語和日語頁面的抓取表現(xiàn)良好,它在GPL許可下發(fā)行,并且完全使用Python編寫。按照robots.txt有一個延時的單網(wǎng)域延時爬蟲。
21、Universal Information Crawler快速發(fā)展的網(wǎng)絡(luò)爬蟲,用于檢索存儲和分析數(shù)據(jù);
22、Agent Kernel,當(dāng)一個爬蟲抓取時,用來進(jìn)行安排,并發(fā)和存儲的java框架。
23、Arachnod.net是一個使用C#編寫,需要SQL Server 2005支持的,在GPL許可下發(fā)行的多功能的開源的機(jī)器人。它可以用來下載,檢索,存儲包括電子郵件地址,文件,超鏈接,圖片和網(wǎng)頁在內(nèi)的各種數(shù)據(jù)。
24、Dine是一個多線程的java的http客戶端。它可以在LGPL許可下進(jìn)行二次開發(fā)。
以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!