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