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