搜索引擎的工作過程大體上可以分成三個階段:
1、爬行和抓取:搜索引擎蜘蛛通過跟蹤鏈接訪問網頁,獲得頁面HTML代碼存入數據庫。
(1)蜘蛛
搜索引擎用來爬行和訪問頁面的程序被稱爲蜘蛛,也稱爲機器人。
搜索引擎蜘蛛訪問網站頁面時,類似於普通用戶使用的瀏覽器。蜘蛛程序發出頁面訪問請求後,服務器返回HTML代碼,蜘蛛程序把收到的代碼存入原始頁面數據庫。搜索引擎爲了提高爬行和抓取速度,都使用多個蜘蛛併發分佈爬行。
蜘蛛訪問任何一個網站時,都會先訪問網站根目錄下的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.con/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)跟蹤鏈接
整個互聯網是由相互鏈接的網站及頁面組成的。從理論上說,蜘蛛從任何一個頁面出發,順着鏈接都可以爬行到網上的所有頁面。當然,由於網站及頁面鏈接結構異常複雜,蜘蛛需要採取一定的爬行策略才能遍歷網上所有頁面。
最簡單的爬行遍歷策略分爲兩種,一種是深度優先,另一種是廣度優先。
所謂深度優先,指的是蜘蛛沿着發現的鏈接一直向前爬行,直到前面再也沒有其他鏈接,然後返回到第一個頁面,沿着另一個鏈接再一直往前爬行。
所謂廣度優先,指蜘蛛在一個頁面上發現多個鏈接時,不是順着一個鏈接一直向前,而是把頁面上所有第一層鏈接都爬一遍,然後再沿着第二層頁面上發現的鏈接爬向第三層頁面。
實際操作中,深度優先和廣度優先通常是混合使用的,這樣既可以照顧到儘量多的網站
(3)吸引蜘蛛
影響被收錄的影響因素有:
a、網站和頁面權重。
b、頁面更新度。
c、導入鏈接。
d、與首頁點擊距離。
(4)地址庫
爲了避免重複爬行和抓取網址,搜索引擎會建立一個地址庫,記錄已經被發現還沒有抓取的頁面,以及已經被抓取的頁面。
地址庫中的URL來源有:
a、人工錄入的種子網站。
b、蜘蛛抓取頁面後,從HTML中解析出新的鏈接URL,與地址庫中的數據進行對比,如果是地址庫中沒有的網址,就存入待訪問地址庫。
c、站長通過搜索引擎網頁提交表格提交進來的網址。
(5)文件存儲
搜索引擎蜘蛛抓取的數據存入原始頁面數據庫。每個URL都有一個獨特的文件編號。
(6)爬行時的複製內容檢測
遇到權重很低的網站上大量轉載或抄襲內容時,很可能不再繼續爬行。
2、預處理:索引程序對抓取來的頁面數據進行文字提取、中文分詞、索引等處理,以備排名程序調用。
(1)提取文字
目前搜索引擎仍以文字內容爲基礎,蜘蛛抓取到的頁面中的HTML代碼,還包含了大量的HTML格式標籤、JavaScript程序等,搜索引擎預處理首先要從HTML文件中去除標籤、程序,提取出可以用於排名處理的網頁面文字內容。
除了可見文字,搜索引擎也會提取出一些特殊的包含文字信息的代碼,如Meta標籤中的文字、圖片替代文字、Flash文件的替代文字、鏈接錨文字等。
(2)中文分詞
英文每個詞之間有空格,中文一個句子中的所有字或詞都是連在一起的。搜索引擎必須首先分辨哪幾個字組成一個詞,哪些字本身就是一個詞。
中文分詞方法有兩種:一種是基於詞典匹配,另一種是基於統計。
基於詞典匹配的方法,是指將分析的一段漢字與一個事先造好的詞典中的詞條進行匹配,在待分析漢字串中掃描到詞典中已有的詞條則匹配成功,或者說切分出一個單詞。其準確度在很大程度上取決於詞典的完整性和更新情況。
基於統計的分詞方法,是指分析大量文字樣本,計算出字與字相鄰出現的統計概率,幾個字相鄰出現越多,就月可能形成一個單詞。基於統計的方法的優勢是對新出現的詞反應更快速,也有利於消除歧義。
實際使用中,分詞系統都是混合使用兩種方法的,快速高校,又能識別生詞、新詞,消除歧義。
(3)去停止詞
停止詞,這裏指的是在網頁內容中出現頻率很高,卻沒有實際影響的詞。如:“的”、“地”、“得”“啊”“但是”等不重要的詞。
搜索引擎在索引頁面之前會去掉這些停止詞,使主題更加突出,減少無謂的計算量。
(4)消除噪聲
絕大部分頁面還有一部分內容,對頁面主題沒有貢獻,比如版權聲明文字、導航條、廣告等。這些區塊都屬於噪聲,會分散頁面主題。
搜索引擎需要識別並消除這些噪聲,排名時不使用噪聲內容。
消除噪聲的基本方法:根據HTML標籤對頁面分塊,區分出頁頭、導航、正文、頁腳、廣告等區域,在網站上大量重複出現的區塊往往屬於噪聲。對頁面進行消噪後,剩下的纔是頁面主體內容。
(5)去重
同一篇文章經常會重複出現在不同網站及同一個網站的不同網址上,搜索引擎並不喜歡這種重複性的內容。雖然都是內容相關的,但用戶搜索時,如果在前兩頁看到的都是來自不同網站的同一篇文章,用戶體驗就太差了,所以在進行索引前還需要識別和刪除重複內容,這個過程就是“去重”。
“去重”的基本方法:對頁面特徵關鍵詞計算指紋,也就是說從頁面主體內容中選取最有代表性的一部分關鍵詞,然後計算這些關鍵詞的數字指紋。通常選取10個特徵關鍵詞就可以達到比較高的計算準確性,再選取更多詞對去重準確性提高的貢獻也就不大了。
典型的指紋計算方法,如MD5算法。這類指紋算法的特點是,輸入特徵關鍵詞有任何微小的變化,都會導致計算出的指紋有很大差距。
瞭解了搜索引擎的去重算法,SEO人員就應該清楚,簡單的增加“的”、“地”、“得”或挑換段落順序這種所謂僞原創,並不能逃過搜索引擎的去重算法,因爲這樣的操作無法改變文章的特徵關鍵詞。而且搜索引擎的去重算法很可能不止於頁面級別,而是進行到段落級別,混合不同文章、交叉調換段落順序也不能使轉載和抄襲變成原創。
(6)正向索引
經過以上步驟後,搜索引擎得到的就是獨特的、能反映頁面主體內容的、以詞爲單位的內容。
接下來搜索引擎索引程序就可以提取關鍵詞,按照分詞程序劃分好的詞,把頁面轉換爲一個關鍵詞組成的集合,同時記錄每一個關鍵詞在頁面上的出現頻率、出現次數、格式(如出現在標題標籤、黑體、H標籤、錨文字等),位置(如頁面第一段文字等)。這樣,每一個頁面都可以記錄爲一串關鍵詞集合,其中每個關鍵詞的詞頻、格式、位置等權重信息也都記錄在案。
搜索引擎索引程序將頁面及關鍵詞形成詞表結構存儲進索引庫。每個文件都對應一個文件ID,文件內容被表示爲一串關鍵詞的集合。其實在搜索引擎索引庫中,關鍵詞也已經轉換爲關鍵詞ID。這樣的數據結構就稱爲正向索引。
(7)倒排索引
(8)鏈接關係計算
(9)特殊文件處理
3、排名:用戶輸入關鍵詞後,排名程序調用索引庫數據,計算相關性,然後按一定格式生成搜索結果頁面。
(1)搜索詞處理
(2)文件匹配
(3)初始子集的選擇
(4)相關性計算
(5)排名過濾及調整
(6)排名顯示
(7)搜索緩存
(8)查詢及點擊日誌