搜索引擎工作原理
一、
搜索引擎工作過程非常復雜,接下來的幾節我們簡單介紹搜索引擎是怎么樣實現網頁排名的。這里的內容相對于真正的搜索引擎技術來說只是皮毛,不過對seo人員已經足夠用了。
搜索引擎的工作過程大體上可以分成三個階段。
(1) 爬行和抓取:搜索引擎蜘蛛通過跟蹤鏈接訪問網頁,獲得頁面HTML代碼存入數據庫。
(2) 預處理:索引程序對抓取來的頁面數據進行文字提取、中文分詞、索引等處理,以備排名程序調用。
(3) 排名:用戶輸入關鍵詞后,排名程序調用索引庫數據,計算相關性,然后按一定的格式生成搜索結果頁面。
二、
爬行和抓取
爬行和抓取是搜索引擎工作的第一步,完成數據收集的任務。
1、 蜘蛛
引擎用來爬行和訪問頁面的程序被稱為蜘蛛(spider),也稱為機器人(bot).搜索引擎蜘蛛訪問網站頁面時類似于普通用戶使用的瀏覽器。蜘蛛程序發出頁面訪問請求后,服務器返回html代碼,蜘蛛程序把收到的代碼存入原始頁面數據庫。搜索引擎為了提高爬行和抓取速度,都使用多個蜘蛛并發分布爬行。
蜘蛛訪問任何一個網站時,都會先訪問網站根目錄下的robots.txt文件。如果robots文件禁止搜索引擎抓取某些文件或目錄,蜘蛛將遵守協議,不抓取被禁止的網址。
和瀏覽器一樣,搜索引擎蜘蛛也有標明自己身份代理名稱,站長可以在日志文件中看到搜索引擎的特定名稱,從而辨識引擎蜘蛛。下面列出常見的搜索引擎蜘蛛名稱:
Baiduspider+(+//www.baidu.com/search/spider.htm)
百度蜘蛛
Mozilla/5.0(compatible;yahoo!
Slurp China; 等等。我就不往下寫了,自己可以去查一下!
2、 跟蹤鏈接
取網上盡量多的頁面,搜索引擎蜘蛛會跟蹤頁面上的鏈接,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網上爬行那樣,這也就是搜索引擎蜘蛛這個名稱的由來。
從理論上說只要給蜘蛛足夠的時間,都能爬完整個互聯網。在實際工作中,蜘蛛的帶寬資源、時間都不是無限的,也不可能爬完所有頁面。
3、 吸引蜘蛛
由些可見,雖然理論上蜘蛛能爬行和抓取所有頁面,但實際上不能、也不會這么做。Seo人員要想讓自己的更多頁面被收錄,就要想方設法吸引蜘蛛來抓取。能抓取所有頁面,蜘蛛所要做的就是盡量抓取重要頁面。哪些頁面被認為比較要呢?有幾個方面影響因素。
1) 網站和頁面權重。質量高、資格老的網站被認為權重比較高,這種止的頁面被爬行的深度也會比較高,所以會有更多內頁被收錄。
2) 頁面更新度。蜘蛛每次爬行都會把頁面數據存儲起來。如果第二次爬行發現頁面與第一收錄的完全一樣,說明頁面沒有更新,蜘蛛也就沒有必要經常抓取。如果頁面內容經常更新,蜘蛛就會更加頻繁地訪問這種頁面,頁面上出現的新鏈接也自然會被蜘蛛更快的跟蹤,抓取新頁面。
3) 導入鏈接。無論是外部鏈接還是同一個網站的內部鏈接,要被蜘蛛抓取,就必須有導入鏈接進入頁面,否則蜘蛛根本沒有機會知道頁面的存在。高質量的導入鏈接也經常使頁面上的導出鏈接被看待深度增加。
4) 與首頁點擊距離。一般來說網站上權重最高的是首頁,大部分外部鏈接是指向首頁的,蜘蛛訪問最頻繁的也是首頁。離首頁點擊距離越近,頁面權重越高,被蜘蛛爬行的機會也越大。
4、 爬行時的復制內容檢測
刪除復制內容通常是在下面的預處理過程中進行的,但現在的蜘蛛在爬行和抓取文件時也會進行一定程度的復制內容檢測。遇到權重很低的網站上大量轉載或抄襲內容時,很可能不再繼續爬行。這也就是有的站長在日志文件中發現了蜘蛛,但頁面從來沒有被真正收錄過的原因。
預處理
在一些seo材料中,“預處理”也被簡稱為“索引”,因為索引是預處理最主要的步驟。
搜索引擎蜘蛛抓取的原始頁面,并不能直接用于查詢排名處理。搜索引擎數據庫中的頁面數都在數萬億級別以上,用戶輸入搜索詞后,靠排名程序實時對這么多頁面分析相關性,計算量太大,不可能在一兩秒內返回排名結果。因此抓取來的頁面必須經過預處理,為最后的查詢排名做好準備。
和看爬行抓取一樣,預處理也是在后臺提前完成的,用戶搜索時感覺不到這個過程。
1、 提取文字
現在的搜索引擎還是以文字內容為基礎。蜘蛛獲取到的頁面中的html代碼,除了用戶在瀏覽器上可以看到的可見文字外,還包含了大量的html格式標簽、javascript程序等無法用于排名的內容。搜索引擎預處理首先要做的就是從html文件中去除標簽、程序,提取出可以用于排名處理的網頁文字內容。
比如這下面這段html代碼:
<div id=”post” class=”ost”>
<div class="posttitle">
<h2><a href=”http:www.baidu.com”>今天是什么節日?</a></h2>
</div>
</div>
除去html代碼后,剩下的就用于排名的文字只是這一行:
今天是什么節日?
除了可見文字,搜索引擎也會提取出一些特殊的包含文字信息的代碼,如Meta 標簽中的文字、圖片替代文字、flash文件的替代文字、鏈接錨文字等。
2、 中文分詞
中文搜索引擎特有的步驟。搜索引擎存儲和處理頁面及用戶都是以詞為基礎的。英文等語言單詞與單詞之間有空格分隔,搜索引擎索引程序可以直接把句子劃分為單詞的集合。而中文詞之間沒有任何分隔符,一個句子中的所有字和詞都是連在一起的搜索引擎必須首先分辨哪幾個字組成一個詞,哪些字本身就是一個詞。比如“減肥方法”將被分詞為“減肥”和“方法“兩個詞。
方法基本上有兩種,一種是基于詞典匹配,另一種是基于統計。
匹配的方法是指,將待分析的一段漢字與一個事先造好的詞典中的詞條進行匹配,在待分析漢字串中掃描到詞典中己有的詞條則匹配成功,或者說切分出一個單詞。
按照掃描方向,基于詞典的匹配法可以分為正向匹配和逆向匹配。按照匹配長度優先級的不同,又可以分為最大匹配和最小匹配。將掃描方向和長度優先混合,難能可貴以產生正向最大匹配、逆向最大匹配等不同方法。
詞典匹配方法計算簡單,準確度在很大程序上取決于詞典的完整性和更新情況。幾個字相鄰出現越多,就越可能形成一個單詞。基于統計的方法的優勢是對新出現的詞反應更快速,也有利于消除歧義。
基于詞典匹配和基于統計的分詞方法各有優劣,實際使用中的分詞系統都是混合使用兩種方法的,快速高效,又能識別生詞、新詞,消除歧義。
索引擎對頁面的分詞取決于詞庫的規模、準確性和分詞算法的好壞,而不是取決于頁面本身如何,所以seo人員對分詞所能做的很少。唯一能做的就是在頁面上用某種形式提示搜索引擎,某幾個字應該被當做一個詞處理,尤其是可能產生歧義的時候,比如在頁面標題、h1標簽及黑體中出現關鍵詞。如果頁面是關于“和服“的內容,那么可以把“和服”這兩個字特意標為黑體。如果頁面是關于“化妝和服裝”,可以把“服裝”兩個字標為黑體。這樣,搜索引擎對頁面進行分析時就知道標為團體的應該是一個詞。
3、 去停止詞
是英文還是中文,頁面內容中都會有一些出現頻率很高,卻對內容沒有任何影響的詞,如“的”、“地”、“得”之類的肋條詞,“啊”、“哈”、“呀”之類的感嘆詞,“從而”、“以”、“卻”之類的副詞或介詞。這些詞被稱為停止詞,因為它們對頁面的主要意思沒什么影響。英文中的常見停止有 the,a,an,to,of等。
索引擎在索引頁面之前會去掉這些停止詞,使索引數據主題更為突出,減少無謂的計算量。
4、 消除噪聲
分頁面上還一部分內容對頁面主題也沒有什么貢獻,比如版權聲明文字、導航條、廣告等。以常見的干博客導航為例,幾乎每個博客頁面上都會出現文章分類、歷史存檔等導航內容,但是這些頁面本身與“分類”、“歷史”這些詞都沒有任何關系。用戶搜索“歷史”、“分類”這些關鍵詞時公公因為頁面上有這些詞出現而返回博客帖子是毫無意義的,完全不相關。所以這些區塊都屬于噪聲,對頁面主題只能起到分散作用。
擎需要識別并消除這些噪聲,排名時不使用噪聲內容。消噪的基本方法是根據html標簽對頁面分塊,區分出頁頭、導航、正文、頁腳、廣告等區域,在網站上大量重復出現的區塊往往屬于噪聲。對頁面進行消噪后,剩下的才是頁面主體內容。
5、 去重
引擎還需要對頁面進行去重處理。
文章經常會重復出現在不同網站及同一個網站的不同網址上,搜索引擎并不喜歡這種重復性的內容。用戶搜索時,如果在前兩頁看到的都是來自不同網站的同一篇文章,用戶體驗就太差了,雖然都是內容相關的。搜索引擎希望只返回相同文章中的一篇,所以在進行索引前還需要識別和刪除重復內容,這個過程就稱為“去重”。
去重的基本方法是對頁面特征關鍵詞計算指紋,也就是說從頁面主體內容中選取最有借到性的一部分關鍵詞(經常是出現
頻率最高的關鍵詞),然后計算這些關鍵詞的數字指紋。這里的關鍵詞選取是在分詞、去停止詞、消噪之后。實驗表明,通常選取10個特征關鍵詞就可以達到比較高的計算準確性,再選取多詞對去重準確性提高的貢獻也就不大了。
6、 正向索引
正向索引也可以簡稱為索引。
提取、分詞、消噪、去重后,搜索引擎得到的就是獨特的、能反映頁面主體內容的、以詞為單位的內容。接下來搜索引擎索引程序就可以提取關鍵詞,按照分詞程序劃分好的詞,把頁面轉換為一個關鍵詞組成的集合,同時記錄每一個關鍵詞在頁面上的出現頻率、出現次數、格式(如出現在標題標簽、黑體、H標簽、錨文字等)、位置(如頁面第一段文字等)。這樣,每一個頁面都可以記錄為一串關鍵詞集合,其中每個關鍵詞的詞頻、格式、位置等權重信息也都記錄在案。
搜索引擎索引程序將頁面及關鍵詞形成表結構存儲進索引庫。簡化的索引詞表形式如表1
每個文件都對應一個文件ID,文件內容被表示為一串關鍵詞的集合。實際上在搜索引擎索引庫中,關鍵詞也已經轉換為關鍵詞ID。這樣的數據結構就稱為正向索引。
7、 倒排索引
正向索引還不能直接用于排名。假設用戶搜索關鍵詞2,如果只存在正向索引,排名程序需要掃描所有索引為中的文件,找出包含關鍵詞2的文件,再進行相關性計算。這樣的計算量無法滿足實時返回排名結果的要求。
所以搜索引擎會將正向索引數據庫重新構造為倒排索引,把文件對應到關鍵詞的映射轉換為關鍵詞到文件的映射,如表
8、 鏈接關系計算
鏈接關系計算也是預處理中很重要的一部分。現在所有的主流搜索引擎排名因素中都包含網頁之間的鏈接流動信息。搜索引擎在抓取頁面內容后,必須事前計算出:頁面上有哪些鏈接指向哪些其它頁面,每個頁面有哪些導入鏈接,鏈接使用了什么錨文字,這些復雜的鏈接指向關系形成了網站和頁面的鏈接權重。
Google pr值就是這種鏈接關系的最主要體現之一。其化搜索引擎也都進行類似計算,雖然它們并不稱為pr。
由于頁面和鏈接數量巨大,網上的鏈接關系又時時處在更新中,因此鏈接關系及Pr的計算要耗費很長時間。關于pr和鏈接分析,后面還有專門的章節介紹。
9、 特殊文件處理
除了html文件外,搜索引擎通常還能抓取各索引以文字為基礎的多種文件類型,如Pdf/word/wps/xls/ppt/txt文件等。我們在搜索結果中也經常會看到這些文件類型。但目前的搜索引擎還不能處理圖片、視頻、flash這類非文字內容,也不能執行腳本和程序。
雖然搜索引擎在識別圖片及從flash中提取文字內容方面有些進步,不過距離直接靠讀取圖片、視頻、flash內容返回結果的目標還很遠。對圖片、視頻內容的排名還往往是依據與之相關的文字內容,后面還會講到整合搜索部分。