對(duì)于不同的應(yīng)用來(lái)說(shuō),爬蟲(chóng)系統(tǒng)實(shí)現(xiàn)方式可能各異,但是實(shí)用的爬蟲(chóng)系統(tǒng)都應(yīng)該具備以下幾種特性。
優(yōu)秀爬蟲(chóng)的特性:高性能
互聯(lián)網(wǎng)的網(wǎng)頁(yè)數(shù)量龐大如海,所以爬蟲(chóng)的性能 至關(guān)重要,這里的性能主要是指爬蟲(chóng)下載網(wǎng)頁(yè)的抓取速度,常見(jiàn)的評(píng)價(jià)方式是以爬蟲(chóng)每秒能夠下載的網(wǎng)頁(yè)數(shù)量作為性能指標(biāo),單位時(shí)間能夠下載的網(wǎng)頁(yè)數(shù)量越多,則爬蟲(chóng)的性能越高。
要提高爬蟲(chóng)的性能,在設(shè)計(jì)時(shí)程序訪(fǎng)問(wèn)磁盤(pán)的操作方法及具體實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的選擇很關(guān)鍵。比如對(duì)于待抓取URL隊(duì)列和已抓取URL隊(duì)列,因?yàn)閁RL數(shù)量非常大,不同實(shí)現(xiàn)方式性能表現(xiàn)迥異,所以高效的數(shù)據(jù)結(jié)構(gòu)對(duì)于爬蟲(chóng)影響很大。
優(yōu)秀爬蟲(chóng)的特性:可擴(kuò)展性
如上所述,爬蟲(chóng)需要抓取的網(wǎng)頁(yè)數(shù)量巨大,即使單個(gè)爬蟲(chóng)的性能很高,要將所有網(wǎng)頁(yè)都下載到本地,仍然需要相關(guān)長(zhǎng)的時(shí)間周期,為了能夠盡可能縮短抓取周期,爬蟲(chóng)系統(tǒng)應(yīng)該有很好的可擴(kuò)展性,即很容易通過(guò)增加抓取服務(wù)器和爬蟲(chóng)數(shù)量來(lái)達(dá)到此目的。
目前實(shí)用的大型網(wǎng)絡(luò)爬蟲(chóng)一定是分布式運(yùn)行的,即多臺(tái)服務(wù)器專(zhuān)做抓取,每臺(tái)服務(wù)器部署多個(gè)爬蟲(chóng),每個(gè)爬蟲(chóng)多線(xiàn)程運(yùn)行,通過(guò)多種方式增加并發(fā)性。對(duì)于巨型的搜索引擎服務(wù)商來(lái)說(shuō),可能還要在全球范圍、不同地域分別部署數(shù)據(jù)中心,爬蟲(chóng)也被分配到不同的數(shù)據(jù)中心,這樣對(duì)于提高爬蟲(chóng)系統(tǒng)整體性能是很有幫助的。
優(yōu)秀爬蟲(chóng)的特性:健壯性
爬蟲(chóng)要訪(fǎng)問(wèn)各類(lèi)型的網(wǎng)站服務(wù)器,可能會(huì)遇到很多種非正常情況,比如網(wǎng)頁(yè)HTML編碼不規(guī)范,被抓取服務(wù)器突然死機(jī),甚至是爬蟲(chóng)陷阱等。爬蟲(chóng)對(duì)各種異常情況能夠正確處理非常重要,否則可能會(huì)不定期停止工作,這是無(wú)法忍受的。
從另外 一個(gè)角度來(lái)講,假設(shè)爬蟲(chóng)程序在抓取過(guò)程中死掉,或者爬蟲(chóng)所在的服務(wù)器宕機(jī),健壯的爬蟲(chóng)系統(tǒng)應(yīng)該能夠做到:再次啟動(dòng)爬蟲(chóng)時(shí),能夠恢復(fù)之前抓取的內(nèi)容和數(shù)據(jù)結(jié)構(gòu),而不是每次都需要把所有工作完全從頭做起,這也是爬蟲(chóng)健壯性的一種體現(xiàn)。