廣度優(yōu)先是指網(wǎng)絡(luò)蜘蛛會(huì)先抓取起始網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè),然后再選擇其中的一個(gè)鏈接網(wǎng)頁(yè),繼續(xù)抓取在此網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè)。這是最常用的方式,因?yàn)檫@個(gè)方法可以讓網(wǎng)絡(luò)蜘蛛并行處理,提高其抓取速度。深度優(yōu)先是指網(wǎng)絡(luò)蜘蛛會(huì)從起始頁(yè)開(kāi)始,一個(gè)鏈接一個(gè)鏈接跟蹤下去,處理完這條線(xiàn)路之后再轉(zhuǎn)入下一個(gè)起始頁(yè),繼續(xù)跟蹤鏈接。這個(gè)方法有個(gè)優(yōu)點(diǎn)是網(wǎng)絡(luò)蜘蛛在設(shè)計(jì)的時(shí)候比較容易。兩種策略的區(qū)別,下圖的說(shuō)明會(huì)更加明確。
由于不可能抓取所有的網(wǎng)頁(yè),有些網(wǎng)絡(luò)蜘蛛對(duì)一些不太重要的網(wǎng)站,設(shè)置了訪(fǎng)問(wèn)的層數(shù)。例如,在上圖中,A為起始網(wǎng)頁(yè),屬于0層,B、C、D、E、F屬于第1層,G、H屬于第2層, I屬于第3層。如果網(wǎng)絡(luò)蜘蛛設(shè)置的訪(fǎng)問(wèn)層數(shù)為2的話(huà),網(wǎng)頁(yè)I是不會(huì)被訪(fǎng)問(wèn)到的。這也讓有些網(wǎng)站上一部分網(wǎng)頁(yè)能夠在搜索引擎上搜索到,另外一部分不能被搜索到。對(duì)于網(wǎng)站設(shè)計(jì)者來(lái)說(shuō),扁平化的網(wǎng)站結(jié)構(gòu)設(shè)計(jì)有助于搜索引擎抓取其更多的網(wǎng)頁(yè)。
網(wǎng)絡(luò)蜘蛛在訪(fǎng)問(wèn)網(wǎng)站網(wǎng)頁(yè)的時(shí)候,經(jīng)常會(huì)遇到加密數(shù)據(jù)和網(wǎng)頁(yè)權(quán)限的問(wèn)題,有些網(wǎng)頁(yè)是需要會(huì)員權(quán)限才能訪(fǎng)問(wèn)。當(dāng)然,網(wǎng)站的所有者可以通過(guò)協(xié)議讓網(wǎng)絡(luò)蜘蛛不去抓?。ㄏ滦」?jié)會(huì)介紹),但對(duì)于一些出售報(bào)告的網(wǎng)站,他們希望搜索引擎能搜索到他們的報(bào)告,但又不能完全**的讓搜索者查看,這樣就需要給網(wǎng)絡(luò)蜘蛛提供相應(yīng)的用戶(hù)名和密碼。網(wǎng)絡(luò)蜘蛛可以通過(guò)所給的權(quán)限對(duì)這些網(wǎng)頁(yè)進(jìn)行網(wǎng)頁(yè)抓取,從而提供搜索。而當(dāng)搜索者點(diǎn)擊查看該網(wǎng)頁(yè)的時(shí)候,同樣需要搜索者提供相應(yīng)的權(quán)限驗(yàn)證。
網(wǎng)站與網(wǎng)絡(luò)蜘蛛
網(wǎng)絡(luò)蜘蛛需要抓取網(wǎng)頁(yè),不同于一般的訪(fǎng)問(wèn),如果控制不好,則會(huì)引起網(wǎng)站服務(wù)器負(fù)擔(dān)過(guò)重。今年4月,淘寶就因?yàn)檠呕⑺阉饕娴木W(wǎng)絡(luò)蜘蛛抓取其數(shù)據(jù)引起淘寶網(wǎng)服務(wù)器的不穩(wěn)定。網(wǎng)站是否就無(wú)法和網(wǎng)絡(luò)蜘蛛交流呢?其實(shí)不然,有多種方法可以讓網(wǎng)站和網(wǎng)絡(luò)蜘蛛進(jìn)行交流。一方面讓網(wǎng)站管理員了解網(wǎng)絡(luò)蜘蛛都來(lái)自哪兒,做了些什么,另一方面也告訴網(wǎng)絡(luò)蜘蛛哪些網(wǎng)頁(yè)不應(yīng)該抓取,哪些網(wǎng)頁(yè)應(yīng)該更新。
每個(gè)網(wǎng)絡(luò)蜘蛛都有自己的名字,在抓取網(wǎng)頁(yè)的時(shí)候,都會(huì)向網(wǎng)站標(biāo)明自己的身份。網(wǎng)絡(luò)蜘蛛在抓取網(wǎng)頁(yè)的時(shí)候會(huì)發(fā)送一個(gè)請(qǐng)求,這個(gè)請(qǐng)求中就有一個(gè)字段為User- agent,用于標(biāo)識(shí)此網(wǎng)絡(luò)蜘蛛的身份。例如Google網(wǎng)絡(luò)蜘蛛的標(biāo)識(shí)為GoogleBot,Baidu網(wǎng)絡(luò)蜘蛛的標(biāo)識(shí)為BaiDuSpider, Yahoo網(wǎng)絡(luò)蜘蛛的標(biāo)識(shí)為Inktomi Slurp。如果在網(wǎng)站上有訪(fǎng)問(wèn)日志記錄,網(wǎng)站管理員就能知道,哪些搜索引擎的網(wǎng)絡(luò)蜘蛛過(guò)來(lái)過(guò),什么時(shí)候過(guò)來(lái)的,以及讀了多少數(shù)據(jù)等等。如果網(wǎng)站管理員發(fā)現(xiàn)某個(gè)蜘蛛有問(wèn)題,就通過(guò)其標(biāo)識(shí)來(lái)和其所有者聯(lián)系。下面是博客中)2004年5月15日的搜索引擎訪(fǎng)問(wèn)日志:
網(wǎng)絡(luò)蜘蛛進(jìn)入一個(gè)網(wǎng)站,一般會(huì)訪(fǎng)問(wèn)一個(gè)特殊的文本文件Robots.txt,這個(gè)文件一般放在網(wǎng)站服務(wù)器的根目錄下。網(wǎng)站管理員可以通過(guò)robots.txt來(lái)定義哪些目錄網(wǎng)絡(luò)蜘蛛不能訪(fǎng)問(wèn),或者哪些目錄對(duì)于某些特定的網(wǎng)絡(luò)蜘蛛不能訪(fǎng)問(wèn)。例如有些網(wǎng)站的可執(zhí)行文件目錄和臨時(shí)文件目錄不希望被搜索引擎搜索到,那么網(wǎng)站管理員就可以把這些目錄定義為拒絕訪(fǎng)問(wèn)目錄。Robots.txt語(yǔ)法很簡(jiǎn)單,例如如果對(duì)目錄沒(méi)有任何限制,可以用以下兩行來(lái)描述:> User-agent: *> Disallow:
當(dāng)然,Robots.txt只是一個(gè)協(xié)議,如果網(wǎng)絡(luò)蜘蛛的設(shè)計(jì)者不遵循這個(gè)協(xié)議,網(wǎng)站管理員也無(wú)法阻止網(wǎng)絡(luò)蜘蛛對(duì)于某些頁(yè)面的訪(fǎng)問(wèn),但一般的網(wǎng)絡(luò)蜘蛛都會(huì)遵循這些協(xié)議,而且網(wǎng)站管理員還可以通過(guò)其它方式來(lái)拒絕網(wǎng)絡(luò)蜘蛛對(duì)某些網(wǎng)頁(yè)的抓取。
網(wǎng)絡(luò)蜘蛛在下載網(wǎng)頁(yè)的時(shí)候,會(huì)去識(shí)別網(wǎng)頁(yè)的HTML代碼,在其代碼的部分,會(huì)有META標(biāo)識(shí)。通過(guò)這些標(biāo)識(shí),可以告訴網(wǎng)絡(luò)蜘蛛本網(wǎng)頁(yè)是否需要被抓取,還可以告訴網(wǎng)絡(luò)蜘蛛本網(wǎng)頁(yè)中的鏈接是否需要被繼續(xù)跟蹤。例如:表示本網(wǎng)頁(yè)不需要被抓取,但是網(wǎng)頁(yè)內(nèi)的鏈接需要被跟蹤。
關(guān)于Robots.txt的語(yǔ)法和META Tag語(yǔ)法,有興趣的讀者查看文獻(xiàn)[4]
現(xiàn)在一般的網(wǎng)站都希望搜索引擎能更全面的抓取自己網(wǎng)站的網(wǎng)頁(yè),因?yàn)檫@樣可以讓更多的訪(fǎng)問(wèn)者能通過(guò)搜索引擎找到此網(wǎng)站。為了讓本網(wǎng)站的網(wǎng)頁(yè)更全面被抓取到,網(wǎng)站管理員可以建立一個(gè)網(wǎng)站地圖,即Site Map。許多網(wǎng)絡(luò)蜘蛛會(huì)把sitemap.htm文件作為一個(gè)網(wǎng)站網(wǎng)頁(yè)爬取的入口,網(wǎng)站管理員可以把網(wǎng)站內(nèi)部所有網(wǎng)頁(yè)的鏈接放在這個(gè)文件里面,那么網(wǎng)絡(luò)蜘蛛可以很方便的把整個(gè)網(wǎng)站抓取下來(lái),避免遺漏某些網(wǎng)頁(yè),也會(huì)減小對(duì)網(wǎng)站服務(wù)器的負(fù)擔(dān)。