搜尋引擎的工作的過程非常複雜,而簡單的講搜尋引擎的工過程大體可以分成三個階段。爬行和抓取:搜尋引擎蜘蛛透過跟蹤連結訪問頁面,獲取頁面HTML程式碼存入資料庫。預處理:搜尋贏球對抓取來的頁面資料文字進行文字提取、中文分詞、索引等處理,以備排名程式呼叫。排名:使用者輸入關鍵字後,排名呼叫索引庫資料,計算相關性,然後按一定格式生成搜尋結果頁面。
爬行和抓取
爬行和抓取是搜尋引擎工作的第一步,完成資料收集任務。
蜘蛛
搜尋引擎用來爬行和訪問頁面的程式被稱為蜘蛛(spider),也稱為機器人(bot)。
蜘蛛代理名稱:
百度蜘蛛: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)
Google 蜘蛛:Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) ·
微軟 Bing 蜘蛛:msnbot/1.1 (+http://search.msn.com/msnbot.htm)·
搜狗蜘蛛: 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/; )
跟蹤連結
為了抓取網上儘量多的頁面,搜尋引擎蜘蛛會跟蹤頁面上的連結,從一個頁面爬到下一個頁面,就好像蜘蛛在蜘蛛網上爬行那樣,這也就是搜尋引擎蜘蛛這個名稱的由來。最簡單的爬行遍歷策略分為兩種,一是深度優先,二是廣度優先。
深度優先搜尋
深度優先搜尋就是在搜尋樹的每一層始終先只擴充套件一個子節點,不斷地向縱深前進直到不能再前進(到達葉子節點或受到深度限制)時,才從當前節點返回到上一級節點,沿另一方向又繼續前進。這種方法的搜尋樹是從樹根開始一枝一枝逐漸形成的。
深度優先搜尋亦稱為縱向搜尋。由於一個有解的問題樹可能含有無窮分枝,深度優先搜尋如果誤入無窮分枝(即深度無限),則不可能找到目標節點。所以,深度優先搜尋策略是不完備的。另外,應用此策略得到的解不一定是最佳解(最短路徑)。
廣度優先搜尋
在深度優先搜尋演算法中,是深度越大的結點越先得到擴充套件。如果在搜尋中把演算法改為按結點的層次進行搜尋, 本層的結點沒有搜尋處理完時,不能對下層結點進行處理,即深度越小的結點越先得到擴充套件,也就是說先產生 的結點先得以擴充套件處理,這種搜尋演算法稱為廣度優先搜尋法。
在深度優先搜尋演算法中,是深度越大的結點越先得到擴充套件。如果在搜尋中把演算法改為按結點的層次進行搜尋, 本層的結點沒有搜尋處理完時,不能對下層結點進行處理,即深度越小的結點越先得到擴充套件,也就是說先產生 的結點先得以擴充套件處理,這種搜尋演算法稱為廣度優先搜尋法。
吸引蜘蛛
哪些頁面被認為比較重要呢?有幾方面影響因素:
· 網站和頁面權重。質量高、資格老的網站被認為權重比較高,這種網站上的頁面被爬行的深度也會比較高,所以會有更多內頁被收錄。
· 頁面更新度。蜘蛛每次爬行都會把頁面資料儲存起來。如果第二次爬行發現頁面與第一次收錄的完全一樣,說明頁面沒有更新,蜘蛛也就沒有必要經常抓取。如果頁面內容經常更新,蜘蛛就會更加頻繁地訪問這種頁面,頁面上出現的新連結,也自然會被蜘蛛更快跟蹤,抓取新頁面。
· 匯入連結。無論是外部連結還是同一個網站的內部連結,要被蜘蛛抓取就必須有匯入連結進入頁面,否則蜘蛛根本沒有機會知道頁面的存在。高質量的匯入連結也經常使頁面上的匯出連結被爬行深度增加。一般來說網站上權重最高的是首頁,大部分外部連結是指向首頁,蜘蛛訪問最頻繁的也是首頁。離首頁點選距離越近,頁面權重越高,被蜘蛛爬行的機會也越大。
地址庫
為了避免重複爬行和抓取網址,搜尋引擎會建立一個地址庫,記錄已經被發現還沒有抓取的頁面,以及已經被抓取的頁面。地址庫中的uRL有幾個來源:
(1)人工錄入的種子網站。
(2)蜘蛛抓取頁面後,從HTML中解析出新的連結uRL,與地址庫中的資料進行對比,如果是地址庫中沒有的網址,就存入待訪問地址庫。
(3)站長透過搜尋引擎網頁提交表格提交進來的網址。
蜘蛛按重要性從待訪問地址庫中提取uRL,訪問並抓取頁面,然後把這個uRL從待訪問地址庫中刪除,放進已訪問地址庫中。
大部分主流搜尋引擎都提供一個表格,讓站長提交網址。不過這些提交來的網址都只是存入地址庫而已,是否收錄還要看頁面重要性如何。搜尋引擎所收錄的絕大部分頁面是蜘蛛自己跟蹤連結得到的。可以說提交頁面基本t是毫無用處的,搜尋引擎更喜歡自己沿著連結發現新頁面。
檔案儲存搜尋引擎蜘蛛抓取的資料存入原始頁面資料庫。其中的頁面資料與使用者瀏覽器得到的HTML是完全一樣的。每個uRI,都有一個獨特的檔案編號。
爬行時的複製內容檢測
檢測並刪除複製內容通常是在下面介紹的預處理過程中進行的,但現在的蜘蛛在爬行和抓取檔案時也會進行定程度的複製內容檢測。遇到權重很低的網站上大量轉載或抄襲內容時,很可能不再繼續爬行。這也就是有的站長在日誌檔案中發現了蜘蛛,但頁面從來沒有被真正收錄過的原因。
預處理
在一些SEO材料中,“預處理”也被簡稱為“索引”,因為索引是預處理最主要的步驟。
搜尋引擎蜘蛛抓取的原始頁面,並不能直接用於查詢排名處理。搜尋引擎資料庫中的頁面數都在數萬億級別以上,使用者輸入搜尋詞後,靠排名程式實時對這麼多頁面分析相關性,計算量太大,不可能在一兩秒內返回排名結果。因此抓取來的頁面必須經過預處理,為最後的查詢排名做好準備。
和爬行抓取一樣,預處理也是在後臺提前完成的,使用者搜尋時感覺不到這個過程。
1.提取文字
現在的搜尋引擎還是以文字內容為基礎。蜘蛛抓取到的頁面中的HTML程式碼,除了使用者在瀏覽器上可以看到的可見文字外,還包含了大量的HTML格式標籤、 JavaScript程式等無法用於排名的內容。搜尋引擎預處理首先要做的就是從HTML檔案中去除標籤、程式,提取出可以用於排名處理的網頁面文字內 容。
今天愚人節哈
除去HTML程式碼後,剩下的用於排名的文字只是這一行:
今天愚人節哈
除了可見文字,搜尋引擎也會提取出一些特殊的包含文字資訊的程式碼,如Meta標籤中的文字、圖片替代文字、Flash檔案的替代文字、連結錨文字等。
2.中文分詞
分詞是中文搜尋引擎特有的步驟。搜尋引擎儲存和處理頁面及使用者搜尋都是以詞為基礎的。英文等語言單詞與單詞之間有空格分隔,搜尋引擎索引程式可以直接把句子 劃分為單詞的集合。而中文詞與詞之間沒有任何分隔符,一個句子中的所有字和詞都是連在一起的。搜尋引擎必須首先分辨哪幾個字組成一個詞,哪些字本身就是一 個詞。比如“減肥方法”將被分詞為“減肥”和“方法”兩個詞。
中文分詞方法基本上有兩種,一種是基於詞典匹配,另一種是基於統計。
基於詞典匹配的方法是指,將待分析的一段漢字與一個事先造好的詞典中的詞條進行匹配,在待分析漢字串中掃描到詞典中已有的詞條則匹配成功,或者說切分出一個單詞。
按照掃描方向,基於詞典的匹配法可以分為正向匹配和逆向匹配。按照匹配長度優先順序的不同,又可以分為最大匹配和最小匹配。將掃描方向和長度優先混合,又可以產生正向最大匹配、逆向最大匹配等不同方法。
詞典匹配方法計算簡單,其準確度在很大程度上取決於詞典的完整性和更新情況。
基於統計的分詞方法指的是分析大量文字樣本,計算出字與字相鄰出現的統計機率,幾個字相鄰出現越多,就越可能形成一個單詞。基於統計的方法的優勢是對新出現的詞反應更快速,也有利於消除歧義。
基於詞典匹配和基於統計的分詞方法各有優劣,實際使用中的分詞系統都是混合使用兩種方法的,快速高效,又能識別生詞、新詞,消除歧義。
中文分詞的準確性往往影響搜尋引擎排名的相關性。比如在百度搜尋“搜尋引擎最佳化”,從快照中可以看到,百度把“搜尋引擎最佳化”這六個字當成一個詞。
而在Google搜尋同樣的詞,快照顯示Google將其分切為“搜尋引擎”和“最佳化”兩個詞。顯然百度切分得更為合理,搜尋引擎最佳化是一個完整的概念。Google分詞時傾向於更為細碎。
這種分詞上的不同很可能是一些關鍵詞排名在不同搜尋引擎有不同表現的原因之一。比如百度更喜歡將搜尋詞完整匹配地出現在頁面上,也就是說搜尋“夠戲部落格” 時,這四個字連續完整出現更容易在百度獲得好的排名。Google就與此不同,不太要求完整匹配。一些頁面出現“夠戲”和“部落格”兩個詞,但不必完整匹配 地出現,“夠戲”出現在前面,“部落格”出現在頁面的其他地方,這樣的頁面在Google搜尋“夠戲部落格”時,也可以獲得不錯的排名。
搜尋引擎對頁面的分詞取決於詞庫的規模、準確性和分詞演算法的好壞,而不是取決於頁面本身如何,所以SEO人員對分詞所能做的很少。唯一能做的是在頁面上用某種形 式提示搜尋引擎,某幾個字應該被當做一個詞處理,尤其是可能產生歧義的時候,比如在頁面標題、h1標籤及黑體中出現關鍵詞。如果頁面是關於“和服”的內 容,那麼可以把“和服”這兩個字特意標為黑體。如果頁面是關於“化妝和服裝”,可以把“服裝”兩個字標為黑體。這樣,搜尋引擎對頁面進行分析時就知道標為 黑體的應該是一個詞。
3.去停止詞
無論是英文還是中文,頁面內容中都會有一些出現頻率很 高,卻對內容沒有任何影響的詞,如“的”、“地”、“得”之類的助詞,“啊”、“哈”、“呀”之類的感嘆詞,“從而”、“以”、“卻”之類的副詞或介詞。 這些詞被稱為停止詞,因為它們對頁面的主要意思沒什麼影響。英文中的常見停止詞有the,a,an,to,of等。
搜尋引擎在索引頁面之前會去掉這些停止詞,使索引資料主題更為突出,減少無謂的計算量。
4.消除噪聲
絕 大部分頁面上還有一部分內容對頁面主題也沒有什麼貢獻,比如版權宣告文字、導航條、廣告等。以常見的部落格導航為例,幾乎每個部落格頁面上都會出現文章分類、 歷史存檔等導航內容,但是這些頁面本身與“分類”、“歷史”這些詞都沒有任何關係。使用者搜尋“歷史”、“分類”這些關鍵詞時僅僅因為頁面上有這些詞出現而 返回部落格帖子是毫無意義的,完全不相關。所以這些區塊都屬於噪聲,對頁面主題只能起到分散作用。
搜尋引擎需要識別並消除這些噪聲,排名時不使用噪聲內容。消噪的基本方法是根據HTML標籤對頁面分塊,區分出頁頭、導航、正文、頁尾、廣告等區域,在網站上大量重複出現的區塊往往屬於噪聲。對頁面進行消噪後,剩下的才是頁面主體內容。
5.去重
搜尋引擎還需要對頁面進行去重處理。
同 一篇文章經常會重複出現在不同網站及同一個網站的不同網址上,搜尋引擎並不喜歡這種重複性的內容。使用者搜尋時,如果在前兩頁看到的都是來自不同網站的同一 篇文章,使用者體驗就太差了,雖然都是內容相關的。搜尋引擎希望只返回相同文章中的一篇,所以在進行索引前還需要識別和刪除重複內容,這個過程就稱為“去 重”。
去重的基本方法是對頁面特徵關鍵詞計算指紋,也就是說從頁面主體內容中選取最有代表性的一部分關鍵詞(經常是出現頻率最高的關鍵 詞),然後計算這些關鍵詞的數字指紋。這裡的關鍵詞選取是在分詞、去停止詞、消噪之後。實驗表明,通常選取10個特徵關鍵詞就可以達到比較高的計算準確 性,再選取更多詞對去重準確性提高的貢獻也就不大了。
典型的指紋計算方法如MD5演算法(資訊摘要演算法第五版)。這類指紋演算法的特點是,輸入(特徵關鍵詞)有任何微小的變化,都會導致計算出的指紋有很大差距。
了 解了搜尋引擎的去重演算法,SEO人員就應該知道簡單地增加“的”、“地”、“得”、調換段落順序這種所謂偽原創,並不能逃過搜尋引擎的去重演算法,因為這樣 的操作無法改變文章的特徵關鍵詞。而且搜尋引擎的去重演算法很可能不止於頁面級別,而是進行到段落級別,混合不同文章、交叉調換段落順序也不能使轉載和抄襲 變成原創。
6.正向索引
正向索引也可以簡稱為索引。
經過文字提取、分詞、 消噪、去重後,搜尋引擎得到的就是獨特的、能反映頁面主體內容的、以詞為單位的內容。接下來搜尋引擎索引程式就可以提取關鍵詞,按照分詞程式劃分好的詞, 把頁面轉換為一個關鍵片語成的集合,同時記錄每一個關鍵詞在頁面上的出現頻率、出現次數、格式(如出現在標題標籤、黑體、H標籤、錨文字等)、位置(如頁 面第一段文字等)。這樣,每一個頁面都可以記錄為一串關鍵詞集合,其中每個關鍵詞的詞頻、格式、位置等權重資訊也都記錄在案。
搜尋引擎索引程式將頁面及關鍵詞形成詞表結構儲存進索引庫。簡化的索引詞表形式如表2-1所示。
每個檔案都對應一個檔案ID,檔案內容被表示為一串關鍵詞的集合。實際上在搜尋引擎索引庫中,關鍵詞也已經轉換為關鍵詞ID.這樣的資料結構就稱為正向索引。
7.倒排索引
正向索引還不能直接用於排名。假設使用者搜尋關鍵詞2,如果只存在正向索引,排名程式需要掃描所有索引庫中的檔案,找出包含關鍵詞2的檔案,再進行相關性計算。這樣的計算量無法滿足實時返回排名結果的要求。
所以搜尋引擎會將正向索引資料庫重新構造為倒排索引,把檔案對應到關鍵詞的對映轉換為關鍵詞到檔案的對映,如表2-2所示。
在倒排索引中關鍵詞是主鍵,每個關鍵詞都對應著一系列檔案,這些檔案中都出現了這個關鍵詞。這樣當使用者搜尋某個關鍵詞時,排序程式在倒排索引中定位到這個關鍵詞,就可以馬上找出所有包含這個關鍵詞的檔案。
8.連結關係計算
連結關係計算也是預處理中很重要的一部分。現在所有的主流搜尋引擎排名因素中都包含網頁之間的連結流動資訊。搜尋引擎在抓取頁面內容後,必須事前計算出:頁 面上有哪些連結指向哪些其他頁面,每個頁面有哪些匯入連結,連結使用了什麼錨文字,這些複雜的連結指向關係形成了網站和頁面的連結權重。
Google PR值就是這種連結關係的最主要體現之一。其他搜尋引擎也都進行類似計算,雖然它們並不稱為PR.
由於頁面和連結數量巨大,網上的連結關係又時時處在更新中,因此連結關係及PR的計算要耗費很長時間。關於PR和連結分析,後面還有專門的章節介紹。
9.特殊檔案處理
除 了HTML檔案外,搜尋引擎通常還能抓取和索引以文字為基礎的多種檔案型別,如PDF、word、wps、XLS、PPT、TXT檔案等。我們在搜尋結果 中也經常會看到這些檔案型別。但目前的搜尋引擎還不能處理圖片、影片、Flash這類非文字內容,也不能執行指令碼和程式。
雖然搜尋引擎在識別圖片及從Flash中提取文字內容方面有些進步,不過距離直接靠讀取圖片、影片、Flash內容返回結果的目標還很遠。對圖片、影片內容的排名還往往是依據與之相關的文字內容,詳細情況可以參考後面的整合搜尋部分。
排名
經過搜尋引擎蜘蛛抓取的介面,搜尋引擎程式 計算得到倒排索引後,收索引擎就準備好可以隨時處理使用者搜尋了。使用者在搜尋框填入關鍵字後,排名程式呼叫索引庫資料,計算排名顯示給客戶,排名過程是與客戶直接互動的。