1、蜘蛛
搜索引擎用來(lái)爬行和訪問(wèn)頁(yè)面的程序被稱為蜘蛛(spider)或機(jī)器人(bot)。
搜索引擎蜘蛛訪問(wèn)網(wǎng)站頁(yè)面的過(guò)程與普通用戶使用瀏覽器的過(guò)程相似。蜘蛛程序發(fā)出頁(yè)面訪問(wèn)請(qǐng)求后,服務(wù)器返回HTML代碼,蜘蛛程序?qū)⑹盏降腍TML代碼存入原始頁(yè)面數(shù)據(jù)庫(kù)。搜索引擎為了提高爬行和抓取速度,常使用多個(gè)蜘蛛并發(fā)分布爬行。
蜘蛛在訪問(wèn)任何一個(gè)網(wǎng)站時(shí),都會(huì)先訪問(wèn)網(wǎng)站根目錄下的robots文件。如果robots文件禁止搜索引擎抓取某些文件或目錄,蜘蛛將遵守協(xié)議,不抓取被禁止的網(wǎng)址。
2、跟蹤鏈接
為了抓取盡量多的頁(yè)面,搜索引擎蜘蛛會(huì)跟蹤頁(yè)面上的鏈接,從一個(gè)頁(yè)面爬行到下一個(gè)頁(yè)面,就好像蜘蛛在蜘蛛網(wǎng)上爬行那樣,這也是搜索引擎蜘蛛這個(gè)名稱的由來(lái)。
整個(gè)互聯(lián)網(wǎng)是由相互鏈接的網(wǎng)站及頁(yè)面組成的。從理論上說(shuō),蜘蛛從任何一個(gè)頁(yè)面出發(fā),順著鏈接都可以爬行到網(wǎng)上的所有頁(yè)面(除了一些與其他網(wǎng)站沒(méi)有任何鏈接的孤島頁(yè)面)。當(dāng)然,由于網(wǎng)站及頁(yè)面鏈接結(jié)構(gòu)異常復(fù)雜,蜘蛛需要采取一定的基于圖論的爬行策略才能遍歷網(wǎng)上所有的頁(yè)面。
最簡(jiǎn)單的爬行遍歷策略分為兩種:一種是深度優(yōu)先,另一種是廣度優(yōu)先。
所謂深度優(yōu)先,指的是蜘蛛沿著發(fā)現(xiàn)的鏈接一直向前爬行,直到前面再也沒(méi)有其他鏈接,然后返回到第一個(gè)頁(yè)面,沿著另一個(gè)鏈接再一直往前爬行。蜘蛛跟蹤鏈接,從A頁(yè)面爬行到 A1、A2、A3、A4。爬完A4頁(yè)面后,如果已經(jīng)沒(méi)有其他鏈接可以跟蹤,則返回A頁(yè)面,順著頁(yè)面上的另一個(gè)鏈接,爬行到 BI、B2、B3、B4。在深度優(yōu)先策略中,蜘蛛一直爬到無(wú)法再向前,才返回爬行另一條線。
廣度優(yōu)先是指蜘蛛在一個(gè)頁(yè)面上發(fā)現(xiàn)多個(gè)鏈接時(shí),不是順著一個(gè)鏈接一直向前,而是把頁(yè)面上所有第一層鏈接都爬行一遍,然后再沿著第二層頁(yè)面上發(fā)現(xiàn)的鏈接爬向第三層頁(yè)面。蜘蛛從A頁(yè)面順著鏈接爬行到A1、B1、C1頁(yè)面,直到A 頁(yè)面上的所有鏈接都爬行完畢,再?gòu)?A1頁(yè)面發(fā)現(xiàn)的下一層鏈接,爬行到 A2、A3、A4頁(yè)面…

從理論上說(shuō),無(wú)論是深度優(yōu)先還是廣度優(yōu)先,只要給予蜘蛛足夠的時(shí)間,都能爬完整個(gè)互聯(lián)網(wǎng)。但在實(shí)際工作中,蜘蛛的帶寬資源、時(shí)間都不是無(wú)限的,不可能、也沒(méi)必要爬完所有頁(yè)面。實(shí)際上,最大的搜索引擎也只是爬行和收錄了互聯(lián)網(wǎng)的一小部分內(nèi)容。
3、吸引蜘蛛爬取的要點(diǎn)
(1) 網(wǎng)站權(quán)重。高質(zhì)量、老域名網(wǎng)站的頁(yè)面更容易被深度爬取,收錄更多內(nèi)頁(yè)。
(2) 頁(yè)面更新頻率。蜘蛛會(huì)記錄頁(yè)面版本,頻繁更新的頁(yè)面會(huì)被更頻繁抓取,新鏈接也能更快被發(fā)現(xiàn)。
(3) 導(dǎo)入鏈接。無(wú)論是外鏈還是內(nèi)鏈,頁(yè)面必須有入口鏈接才能被蜘蛛發(fā)現(xiàn)。高質(zhì)量外鏈能提升抓取深度。
(4) 與首頁(yè)的距離。一般來(lái)說(shuō),首頁(yè)權(quán)重最高,離首頁(yè)越近的頁(yè)面,被蜘蛛爬行的幾率越大。
(5) URL結(jié)構(gòu)。頁(yè)面權(quán)重越高,越容易被蜘蛛抓取。蜘蛛會(huì)基于鏈接結(jié)構(gòu)、URL長(zhǎng)度等因素進(jìn)行預(yù)判,除了鏈接、與首頁(yè)距離、歷史數(shù)據(jù)等因素,短的、層次淺的URL也可能被直觀地認(rèn)為在網(wǎng)站上的權(quán)重相對(duì)較高。
4、地址庫(kù)及調(diào)度系統(tǒng)
為了避免重復(fù)爬行和抓取網(wǎng)址,搜索引擎會(huì)建立地址庫(kù),記錄已經(jīng)被發(fā)現(xiàn)但還沒(méi)有抓取的頁(yè)面,以及已經(jīng)被抓取的頁(yè)面。蜘蛛在頁(yè)面上發(fā)現(xiàn)鏈接后并不是馬上就去訪問(wèn),而是將URL存入地址庫(kù),然后統(tǒng)一由調(diào)度系統(tǒng)安排抓取。
蜘蛛按重要性從待訪問(wèn)地址庫(kù)中提取URL,訪問(wèn)并抓取頁(yè)面,然后把這個(gè)URL從待訪問(wèn)地址庫(kù)中刪除,存放進(jìn)已訪問(wèn)地址庫(kù)中。無(wú)論是通過(guò) XML網(wǎng)站地圖還是通過(guò)表格提交的網(wǎng)址,都只是存入地址庫(kù)而已,是否抓取和收錄取決于其頁(yè)面的重要性和質(zhì)量。搜索引擎收錄的絕大部分頁(yè)面是蜘蛛自己跟蹤鏈接得到的。對(duì)中小網(wǎng)站來(lái)說(shuō),提交頁(yè)面的作用微乎其微,搜索引擎更喜歡自己沿著鏈接發(fā)現(xiàn)新頁(yè)面。大型網(wǎng)站提交XML網(wǎng)站地圖對(duì)收錄有一定幫助。
5、文件存儲(chǔ)
搜索引擎蜘蛛抓取的數(shù)據(jù)存入原始頁(yè)面數(shù)據(jù)庫(kù),其中的頁(yè)面數(shù)據(jù)與用戶瀏覽器得到的 HTML 是完全一樣的,每個(gè)URL都有一個(gè)獨(dú)特的文件編號(hào)。
6、爬行時(shí)的復(fù)制內(nèi)容檢測(cè)
復(fù)制內(nèi)容檢測(cè)通常在預(yù)處理階段完成,但蜘蛛在爬行時(shí)也會(huì)初步識(shí)別,但蜘蛛在爬行和抓取文件時(shí),也會(huì)進(jìn)行一定程度的復(fù)制內(nèi)容檢測(cè)。若發(fā)現(xiàn)權(quán)重很低的網(wǎng)站上出現(xiàn)大量轉(zhuǎn)載或抄襲內(nèi)容,蜘蛛很可能不再繼續(xù)爬行。這也是有的站長(zhǎng)在日志文件中發(fā)現(xiàn)了蜘蛛,但頁(yè)面卻從來(lái)沒(méi)有被真正收錄過(guò)的原因之一。
改編自昝輝《SEO實(shí)戰(zhàn)密碼》第5版