搜索引擎工作原理




搜索引擎的工作過程大體上可以分成三個階段。
(1)爬行和抓取:搜索引擎蜘蛛通過跟蹤鏈接訪問網頁,獲得頁面HTML代碼存入數據庫。
(2)預處理:索引程序對抓取來的頁面數據進行文字提取、中文分詞、索引等處理,以備排名程序調用。
(3)排名:用戶輸入關鍵詞后,排名程序調用索引庫數據,計算相關性,然后按一定格式生成搜索結果頁面。
爬行和抓取
爬行和抓取是搜索引擎工作的第一步,完成數據收集的任務。
1.蜘蛛
搜索引擎用來爬行和訪問頁面的程序被稱為蜘蛛(spider),也稱為機器人(bot)。
搜索引擎蜘蛛訪問網站頁面時類似于普通用戶使用的瀏覽器。蜘蛛程序發出頁面訪問請求后,服務器返回HTML代碼,蜘蛛程序把收到的代碼存入原始頁面數據庫。搜索引擎為了提高爬行和抓取速度,都使用多個蜘蛛并發分布爬行。
蜘蛛訪問任何一個網站時,都會先訪問網站根目錄下的robots.txt文件。如果robots.txt文件禁止搜索引擎抓取某些文件或目錄,蜘蛛將遵守協議,不抓取被禁止的網址。
和瀏覽器一樣,搜索引擎蜘蛛也有標明自己身份的代理名稱,站長可以在日志文件中看到搜索引擎的特定代理名稱,從而辨識搜索引擎蜘蛛。下面列出常見的搜索引擎蜘蛛名稱:
· 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.跟蹤鏈接
為了抓取網上盡量多的頁面,搜索引擎蜘蛛會跟蹤頁面上的鏈接,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網上爬行那樣,這也就是搜索引擎蜘蛛這個名稱的由來。
整個互聯網是由相互鏈接的網站及頁面組成的。從理論上說,蜘蛛從任何一個頁面出發,順著鏈接都可以爬行到網上的所有頁面。當然,由于網站及頁面鏈接結構異常復雜,蜘蛛需要采取一定的爬行策略才能遍歷網上所有頁面。
最簡單的爬行遍歷策略分為兩種,一種是深度優先,另一種是廣度優先。
所謂深度優先,指的是蜘蛛沿著發現的鏈接一直向前爬行,直到前面再也沒有其他鏈接,然后返回到第一個頁面,沿著另一個鏈接再一直往前爬行。
如圖2-20所示,蜘蛛跟蹤鏈接,從A頁面爬行到A1,A2,A3,A4,到A4頁面后,已經沒有其他鏈接可以跟蹤就返回A頁面,順著頁面上的另一個鏈接,爬行到B1,B2,B3,B4。在深度優先策略中,蜘蛛一直爬到無法再向前,才返回爬另一條線。
廣度優先是指蜘蛛在一個頁面上發現多個鏈接時,不是順著一個鏈接一直向前,而是把頁面上所有第一層鏈接都爬一遍,然后再沿著第二層頁面上發現的鏈接爬向第三層頁面。
如圖2-21所示,蜘蛛從A頁面順著鏈接爬行到A1,B1,C1頁面,直到A頁面上的所有鏈接都爬行完,然后再從A1頁面發現的下一層鏈接,爬行到A2,A3,A4,……頁面。
圖2-20 深度優先遍歷策略
圖2-21 廣度優先遍歷策略
從理論上說,無論是深度優先還是廣度優先,只要給蜘蛛足夠的時間,都能爬完整個互聯網。在實際工作中,蜘蛛的帶寬資源、時間都不是無限的,也不可能爬完所有頁面。實際上最大的搜索引擎也只是爬行和收錄了互聯網的一小部分。
深度優先和廣度優先通常是混合使用的,這樣既可以照顧到盡量多的網站(廣度優先),也能照顧到一部分網站的內頁(深度優先)。
3.吸引蜘蛛
由此可見,雖然理論上蜘蛛能爬行和抓取所有頁面,但實際上不能、也不會這么做。SEO人員要想讓自己的更多頁面被收錄,就要想方設法吸引蜘蛛來抓取。既然不能抓取所有頁面,蜘蛛所要做的就是盡量抓取重要頁面。哪些頁面被認為比較重要呢?有幾方面影響因素。
1、網站和頁面權重。質量高、資格老的網站被認為權重比較高,這種網站上的頁面被爬行的深度也會比較高,所以會有更多內頁被收錄。
2、頁面更新度。蜘蛛每次爬行都會把頁面數據存儲起來。如果第二次爬行發現頁面與第一次收錄的完全一樣,說明頁面沒有更新,蜘蛛也就沒有必要經常抓取。如果頁面內容經常更新,蜘蛛就會更加頻繁地訪問這種頁面,頁面上出現的新鏈接,也自然會被蜘蛛更快地跟蹤,抓取新頁面。
3、導入鏈接。無論是外部鏈接還是同一個網站的內部鏈接,要被蜘蛛抓取,就必須有導入鏈接進入頁面,否則蜘蛛根本沒有機會知道頁面的存在。高質量的導入鏈接也經常使頁面上的導出鏈接被爬行深度增加。
4、與首頁點擊距離。一般來說網站上權重最高的是首頁,大部分外部鏈接是指向首頁的,蜘蛛訪問最頻繁的也是首頁。離首頁點擊距離越近,頁面權重越高,被蜘蛛爬行的機會也越大。
4.地址庫
為了避免重復爬行和抓取網址,搜索引擎會建立一個地址庫,記錄已經被發現還沒有抓取的頁面,以及已經被抓取的頁面。
地址庫中的URL有幾個來源:
(1)人工錄入的種子網站。
(2)蜘蛛抓取頁面后,從HTML中解析出新的鏈接URL,與地址庫中的數據進行對比,如果是地址庫中沒有的網址,就存入待訪問地址庫。
(3)站長通過搜索引擎網頁提交表格提交進來的網址。
蜘蛛按重要性從待訪問地址庫中提取URL,訪問并抓取頁面,然后把這個URL從待訪問地址庫中刪除,放進已訪問地址庫中。
大部分主流搜索引擎都提供一個表格,讓站長提交網址。不過這些提交來的網址都只是存入地址庫而已,是否收錄還要看頁面重要性如何。搜索引擎所收錄的絕大部分頁面是蜘蛛自己跟蹤鏈接得到的。可以說提交頁面基本上是毫無用處的,搜索引擎更喜歡自己沿著鏈接發現新頁面。
5.文件存儲
搜索引擎蜘蛛抓取的數據存入原始頁面數據庫。其中的頁面數據與用戶瀏覽器得到的HTML是完全一樣的。每個URL都有一個獨特的文件編號。
6.爬行時的復制內容檢測
檢測并刪除復制內容通常是在下面介紹的預處理過程中進行的,但現在的蜘蛛在爬行和抓取文件時也會進行一定程度的復制內容檢測。遇到權重很低的網站上大量轉載或抄襲內容時,很可能不再繼續爬行。