搜索引擎工作原理




搜索引擎的工作過程大體上可以分成三個階段。
(1)爬行和抓?。核阉饕嬷┲胪ㄟ^跟蹤鏈接訪問網(wǎng)頁,獲得頁面HTML代碼存入數(shù)據(jù)庫。
(2)預(yù)處理:索引程序?qū)ψト淼捻撁鏀?shù)據(jù)進(jìn)行文字提取、中文分詞、索引等處理,以備排名程序調(diào)用。
(3)排名:用戶輸入關(guān)鍵詞后,排名程序調(diào)用索引庫數(shù)據(jù),計算相關(guān)性,然后按一定格式生成搜索結(jié)果頁面。
爬行和抓取
爬行和抓取是搜索引擎工作的第一步,完成數(shù)據(jù)收集的任務(wù)。
1.蜘蛛
搜索引擎用來爬行和訪問頁面的程序被稱為蜘蛛(spider),也稱為機(jī)器人(bot)。
搜索引擎蜘蛛訪問網(wǎng)站頁面時類似于普通用戶使用的瀏覽器。蜘蛛程序發(fā)出頁面訪問請求后,服務(wù)器返回HTML代碼,蜘蛛程序把收到的代碼存入原始頁面數(shù)據(jù)庫。搜索引擎為了提高爬行和抓取速度,都使用多個蜘蛛并發(fā)分布爬行。
蜘蛛訪問任何一個網(wǎng)站時,都會先訪問網(wǎng)站根目錄下的robots.txt文件。如果robots.txt文件禁止搜索引擎抓取某些文件或目錄,蜘蛛將遵守協(xié)議,不抓取被禁止的網(wǎng)址。
和瀏覽器一樣,搜索引擎蜘蛛也有標(biāo)明自己身份的代理名稱,站長可以在日志文件中看到搜索引擎的特定代理名稱,從而辨識搜索引擎蜘蛛。下面列出常見的搜索引擎蜘蛛名稱:
· Baiduspider+(+http://www.baidu.com/search/spider.htm) 百度蜘蛛
· Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html) 雅虎中國蜘蛛
· Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) 英文雅虎蜘蛛
· Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Google蜘蛛
· msnbot/1.1 (+http://search.msn.com/msnbot.htm) 微軟 Bing蜘蛛
· Sogou+web+robot+(+http://www.sogou.com/docs/help/webmasters.htm#07)搜狗蜘蛛
· Sosospider+(+http://help.soso.com/webspider.htm) 搜搜蜘蛛
· Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/; ) 有道蜘蛛
2.跟蹤鏈接
為了抓取網(wǎng)上盡量多的頁面,搜索引擎蜘蛛會跟蹤頁面上的鏈接,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網(wǎng)上爬行那樣,這也就是搜索引擎蜘蛛這個名稱的由來。
整個互聯(lián)網(wǎng)是由相互鏈接的網(wǎng)站及頁面組成的。從理論上說,蜘蛛從任何一個頁面出發(fā),順著鏈接都可以爬行到網(wǎng)上的所有頁面。當(dāng)然,由于網(wǎng)站及頁面鏈接結(jié)構(gòu)異常復(fù)雜,蜘蛛需要采取一定的爬行策略才能遍歷網(wǎng)上所有頁面。
最簡單的爬行遍歷策略分為兩種,一種是深度優(yōu)先,另一種是廣度優(yōu)先。
所謂深度優(yōu)先,指的是蜘蛛沿著發(fā)現(xiàn)的鏈接一直向前爬行,直到前面再也沒有其他鏈接,然后返回到第一個頁面,沿著另一個鏈接再一直往前爬行。
如圖2-20所示,蜘蛛跟蹤鏈接,從A頁面爬行到A1,A2,A3,A4,到A4頁面后,已經(jīng)沒有其他鏈接可以跟蹤就返回A頁面,順著頁面上的另一個鏈接,爬行到B1,B2,B3,B4。在深度優(yōu)先策略中,蜘蛛一直爬到無法再向前,才返回爬另一條線。
廣度優(yōu)先是指蜘蛛在一個頁面上發(fā)現(xiàn)多個鏈接時,不是順著一個鏈接一直向前,而是把頁面上所有第一層鏈接都爬一遍,然后再沿著第二層頁面上發(fā)現(xiàn)的鏈接爬向第三層頁面。
如圖2-21所示,蜘蛛從A頁面順著鏈接爬行到A1,B1,C1頁面,直到A頁面上的所有鏈接都爬行完,然后再從A1頁面發(fā)現(xiàn)的下一層鏈接,爬行到A2,A3,A4,……頁面。
圖2-20 深度優(yōu)先遍歷策略
圖2-21 廣度優(yōu)先遍歷策略
從理論上說,無論是深度優(yōu)先還是廣度優(yōu)先,只要給蜘蛛足夠的時間,都能爬完整個互聯(lián)網(wǎng)。在實際工作中,蜘蛛的帶寬資源、時間都不是無限的,也不可能爬完所有頁面。實際上最大的搜索引擎也只是爬行和收錄了互聯(lián)網(wǎng)的一小部分。
深度優(yōu)先和廣度優(yōu)先通常是混合使用的,這樣既可以照顧到盡量多的網(wǎng)站(廣度優(yōu)先),也能照顧到一部分網(wǎng)站的內(nèi)頁(深度優(yōu)先)。
3.吸引蜘蛛
由此可見,雖然理論上蜘蛛能爬行和抓取所有頁面,但實際上不能、也不會這么做。SEO人員要想讓自己的更多頁面被收錄,就要想方設(shè)法吸引蜘蛛來抓取。既然不能抓取所有頁面,蜘蛛所要做的就是盡量抓取重要頁面。哪些頁面被認(rèn)為比較重要呢?有幾方面影響因素。
1、網(wǎng)站和頁面權(quán)重。質(zhì)量高、資格老的網(wǎng)站被認(rèn)為權(quán)重比較高,這種網(wǎng)站上的頁面被爬行的深度也會比較高,所以會有更多內(nèi)頁被收錄。
2、頁面更新度。蜘蛛每次爬行都會把頁面數(shù)據(jù)存儲起來。如果第二次爬行發(fā)現(xiàn)頁面與第一次收錄的完全一樣,說明頁面沒有更新,蜘蛛也就沒有必要經(jīng)常抓取。如果頁面內(nèi)容經(jīng)常更新,蜘蛛就會更加頻繁地訪問這種頁面,頁面上出現(xiàn)的新鏈接,也自然會被蜘蛛更快地跟蹤,抓取新頁面。
3、導(dǎo)入鏈接。無論是外部鏈接還是同一個網(wǎng)站的內(nèi)部鏈接,要被蜘蛛抓取,就必須有導(dǎo)入鏈接進(jìn)入頁面,否則蜘蛛根本沒有機(jī)會知道頁面的存在。高質(zhì)量的導(dǎo)入鏈接也經(jīng)常使頁面上的導(dǎo)出鏈接被爬行深度增加。
4、與首頁點擊距離。一般來說網(wǎng)站上權(quán)重最高的是首頁,大部分外部鏈接是指向首頁的,蜘蛛訪問最頻繁的也是首頁。離首頁點擊距離越近,頁面權(quán)重越高,被蜘蛛爬行的機(jī)會也越大。
4.地址庫
為了避免重復(fù)爬行和抓取網(wǎng)址,搜索引擎會建立一個地址庫,記錄已經(jīng)被發(fā)現(xiàn)還沒有抓取的頁面,以及已經(jīng)被抓取的頁面。
地址庫中的URL有幾個來源:
(1)人工錄入的種子網(wǎng)站。
(2)蜘蛛抓取頁面后,從HTML中解析出新的鏈接URL,與地址庫中的數(shù)據(jù)進(jìn)行對比,如果是地址庫中沒有的網(wǎng)址,就存入待訪問地址庫。
(3)站長通過搜索引擎網(wǎng)頁提交表格提交進(jìn)來的網(wǎng)址。
蜘蛛按重要性從待訪問地址庫中提取URL,訪問并抓取頁面,然后把這個URL從待訪問地址庫中刪除,放進(jìn)已訪問地址庫中。
大部分主流搜索引擎都提供一個表格,讓站長提交網(wǎng)址。不過這些提交來的網(wǎng)址都只是存入地址庫而已,是否收錄還要看頁面重要性如何。搜索引擎所收錄的絕大部分頁面是蜘蛛自己跟蹤鏈接得到的??梢哉f提交頁面基本上是毫無用處的,搜索引擎更喜歡自己沿著鏈接發(fā)現(xiàn)新頁面。
5.文件存儲
搜索引擎蜘蛛抓取的數(shù)據(jù)存入原始頁面數(shù)據(jù)庫。其中的頁面數(shù)據(jù)與用戶瀏覽器得到的HTML是完全一樣的。每個URL都有一個獨特的文件編號。
6.爬行時的復(fù)制內(nèi)容檢測
檢測并刪除復(fù)制內(nèi)容通常是在下面介紹的預(yù)處理過程中進(jìn)行的,但現(xiàn)在的蜘蛛在爬行和抓取文件時也會進(jìn)行一定程度的復(fù)制內(nèi)容檢測。遇到權(quán)重很低的網(wǎng)站上大量轉(zhuǎn)載或抄襲內(nèi)容時,很可能不再繼續(xù)爬行。