搜尋引擎用來爬行和訪問頁面的程序被稱為蜘蛛(spider),也叫機器人(bot)。搜尋引擎蜘蛛訪問網站頁面時類似於普通用戶使用瀏覽器,蜘蛛程序發出頁面訪問請求後,伺服器返回HTML代碼,蜘蛛程序把收到的代碼存入原始頁面資料庫,搜尋引擎為了提高爬行和抓取的速度,都使用多個蜘蛛分布爬行。
蜘蛛訪問網站時,首先會訪問網站根目錄下的robots.txt文件,如果robots.txt文件禁止搜尋引擎抓取某些網頁或者內容,再或者網站,蜘蛛將遵循協議,不對其進行抓取(具體可查看古月建站博客《robots協議文件的寫法及語法屬性解釋》的相關介紹)。
蜘蛛也是有自己的代理名稱的,在站長日誌中可以看出蜘蛛爬行的痕跡,這也就是為什麼這麼多站長解答問題的時候,都會說先查看網站日誌(作為一個出色的SEO你必須具備不藉助任何軟體查看網站日誌的能力,並且要非常熟悉其代碼的意思)。
一、搜尋引擎蜘蛛的基本原理
搜尋引擎蜘蛛即Spider,是一個很形象的名字,把網際網路比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。
網絡蜘蛛是通過網頁的連結地址來尋找網頁,從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完為止。
如果把整個網際網路當成一個網站,那麼網絡蜘蛛就可以用這個原理把網際網路上所有的網頁都抓取下來。
對於搜尋引擎來說,要抓取網際網路上所有的網頁幾乎是不可能的,從目前公布的數據來看,容量最大的搜尋引擎也不過是抓取了整個網頁數量的百分之四十左右。
這其中的原因一方面是抓取技術的瓶頸,100億網頁的容量是100×2000G字節,即使能夠存儲,下載也存在問題(按照一臺機器每秒下載20K計算,需要340臺機器不停的下載一年時間,才能把所有網頁下載完畢),同時,由於數據量太大,在提供搜索時也會有效率方面的影響。
因此,許多搜尋引擎的網絡蜘蛛只是抓取那些重要的網頁(每個搜尋引擎的蜘蛛抓取的原則也都不同,具體可對照一下古月建站博客的《解讀IIS日誌中搜尋引擎蜘蛛名稱代碼及爬尋返回代碼》相關介紹來查詢一下你的網站日誌),而在抓取的時候評價重要性主要的依據是某個網頁的連結深度。
由於不可能抓取所有的網頁,有些網絡蜘蛛對一些不太重要的網站,設置了訪問的層數,例如,下圖中所示:
A為起始網頁,屬於0層,B、C、D、E、F屬於第1 層,G、H屬於第2層,I屬於第3層,如果網絡蜘蛛設置的訪問層數為2的話,網頁I是不會被訪問到的,這也讓有些網站上一部分網頁能夠在搜尋引擎上搜索到,另外一部分不能被搜索到。
對於網站設計者來說,扁平化的網站結構設計有助於搜尋引擎抓取其更多的網頁。
網絡蜘蛛在訪問網站網頁的時候,經常會遇到加密數據和網頁權限的問題,有些網頁是需要會員權限才能訪問。
當然,網站的所有者可以通過協議讓網絡蜘蛛不去抓取,但對於一些出售報告的網站,他們希望搜尋引擎能搜索到他們的報告,但又不能完全免費的讓搜索者查看,這樣就需要給網絡蜘蛛提供相應的用戶名和密碼。
網絡蜘蛛可以通過所給的權限對這些網頁進行網頁抓取,從而提供搜索,而當搜索者點擊查看該網頁的時候,同樣需要搜索者提供相應的權限驗證。
二、追蹤連結
由於搜尋引擎蜘蛛為了能夠抓取網上儘量多的頁面,它會追蹤網頁上的連結,從一個頁面爬到下一個頁面,就好像是蜘蛛在蜘蛛網上爬行那樣,這就是搜尋引擎蜘蛛這個名稱的來因。
整個網際網路網站都是相互連結組成的,也就是說,搜尋引擎蜘蛛從任何一個頁面出發最終都會爬完所有頁面。
當然網站和頁面連結結構太過於複雜,所以蜘蛛只有採用一定的方法才能夠爬完所有頁面,據古月建站了解最簡單的爬行策略有3種:
1、最佳優先
最佳優先搜索策略按照一定的網頁分析算法,預測候選URL與目標網頁的相似度,或與主題的相關性,並選取評價最好的一個或幾個URL進行抓取,它只訪問經過網頁分析算法預測為「有用」的網頁。
存在的一個問題是,在爬蟲抓取路徑上的很多相關網頁可能被忽略,因為最佳優先策略是一種局部最優搜索算法,因此需要將最佳優先結合具體的應用進行改進,以跳出局部最優點,據古月建站博客的研究發現,這樣的閉環調整可以將無關網頁數量降低30%~90%。
2、深度優先
深度優先是指蜘蛛沿著發現的連結一直向前爬行,直到前面再也沒有其他連結,然後返回到第一個頁面,沿著另一個連結再一直往前爬行。
3、廣度優先
廣度優先是指蜘蛛在一個頁面發現多個連結時,不是順著一個連結一直向前,而是把頁面上所有連結都爬一遍,然後再進入第二層頁面沿著第二層上發現的連結爬向第三層頁面。
從理論上說,無論是深度優先還是廣度優先,只要給蜘蛛足夠的時間,都能爬完整個網際網路。
在實際工作中,蜘蛛的帶寬資源、時間都不是無限的,也不能爬完所有頁面,實際上最大的搜尋引擎也只是爬行和收錄了網際網路的一小部分,當然也並不是搜尋引擎蜘蛛爬取的越多越好,這點我曾在古月建站博客的《抓取網站的搜尋引擎蜘蛛是不是越多越好》一文中跟大家做過詳細的介紹。
因此,為了儘量多的抓取用戶信息,深度優先和廣度優先通常是混合使用的,這樣既可以照顧到儘量多的網站,也能照顧到一部分網站的內頁。
三、搜尋引擎蜘蛛工作中的信息收集
信息收集模塊包括「蜘蛛控制」和「網絡蜘蛛」兩部分,「蜘蛛」這個稱呼形象的描述出了信息收集模塊在網絡數據形成的「Web」上進行信息獲取的功能。
總體而言,網絡蜘蛛從種子網頁出發,通過反覆下載網頁並從文檔中尋找未曾見過的URL,達到訪問其他網頁得以遍歷Web的目的。
而其工作策略一般則可以分為累積式抓取(cumulative crawling)和增量式抓取(incremental crawling)兩種。
1、累積式抓取
累積式抓取是指從某一個時間點開始,通過遍歷的方式抓取系統所能允許存儲和處理的所有網頁。在理想的軟硬體環境下,經過足夠的運行時間,累積式抓取的策略可以保證抓取到相當規模的網頁集合。
但在古月建站看來由於Web數據的動態特性,集合中網頁的被抓取時間點是不同的,頁面被更新的情況也不同,因此累積式抓取到的網頁集合事實上並無法與真實環境中的網絡數據保持一致。
2、增量式抓取
與累積式抓取不同,增量式抓取是指在具有一定量規模的網絡頁面集合的基礎上,採用更新數據的方式選取已有集合中的過時網頁進行抓取,以保證所抓取到的數據與真實網絡數據足夠接近。
進行增量式抓取的前提是,系統已經抓取了足夠數量的網絡頁面,並具有這些頁面被抓取的時間信息。面向實際應用環境的網絡蜘蛛設計中,通常既包括累積式抓取,也包括增量式抓取的策略。
累積式抓取一般用於數據集合的整體建立或大規模更新階段,而增量式抓取則主要針對數據集合的日常維護與即時更新。
在確定了抓取策略之後,如何從充分利用網絡帶寬,合理確定網頁數據更新的時間點就成了網絡蜘蛛運行策略中的核心問題。
總體而言,在合理利用軟硬體資源進行針對網絡數據的即時抓取方面,已經形成了相對比較成熟的技術和實用性解決方案,古月建站覺得在這方面目前所需解決的主要問題是如何更好的處理動態網絡數據問題(如數量越來越龐大的Web2.0數據等),以及更好的根據網頁質量修正抓取策略的問題。
四、資料庫
為了避免重複爬行和抓取網址,搜尋引擎會建立一個資料庫,記錄已被發現還沒有抓取的頁面和已經被抓取的頁面,那麼資料庫中的URL是怎麼來的呢?
1、人工錄入種子網站
這個簡單的來說,就是我們建好一個新站後,向百度、Google或360提交的網址收錄。
2、蜘蛛抓取頁面
如果搜尋引擎蜘蛛在爬取的過程中,發現了新連接URL,資料庫中沒有,就會存入待訪問資料庫(網站觀察期)。
蜘蛛按重要性從待訪問資料庫中提取URL,訪問並抓取頁面,然後把這個URL從待訪問地址庫中刪除,放進已訪問地址庫中,所以古月建站建議各位站長在網站觀察期的時候儘量有規律的更新網站是必要的。
3、站長提交網站
一般來說,提交網站只是把網站存入待訪問資料庫,如果網站持久不更新蜘蛛也不會光顧,搜尋引擎收錄的頁面都是蜘蛛自己追蹤連結得到的。
所以你提交給搜尋引擎其實用處不大,還是要根據後期你網站更新程度來考慮,搜尋引擎更喜歡自己沿著連結發現新頁面,當然如果說你的SEO技術夠老練,並且有這能力,可以試一下,說不定會有意想不到的效果,不過,對於一般在站長來說,古月建站還是建議讓蜘蛛自然的爬行和抓取到新站頁面。
五、吸引蜘蛛
雖然理論上說蜘蛛可以爬行和抓取所有頁面,但實際上是不可能完成的,那麼SEO人員想要收錄更多的頁面就只有想辦法引誘蜘蛛抓取。
既然抓不了所有頁面,那麼我們就要讓它抓取重要頁面,因為重要頁面在索引中起到重要決定,直接影響排名的因素,哪麼那些頁面算是比較重要的呢?對此,古月建站也特意整理了以下幾個我認為比較重要頁面,具體有這麼幾個特點:
1、網站和頁面權重
質量高、年齡老的網站被給予很高的權重,這種網站上的頁面蜘蛛爬行的深度比較高,所以會有更多的內頁被收錄。
2、頁面更新度
蜘蛛每次爬行都會把頁面數據儲存起來,如果第二次爬行時發現此頁面與第一次收錄的內容完全一樣,說明頁面沒有更新,蜘蛛也沒必要經常再來爬行和抓取。
如果頁面內容經常更新,蜘蛛就會頻繁的爬行和抓取,那麼,頁面上的新連結自然的會被蜘蛛更快的追蹤和抓取,這也就是為什麼需要每天更新文章(具體可查看古月建站博客的《百度收錄網站文章的現狀及原則依據》相關介紹)。
3、導入連結
無論是外部連結還是同一個網站的內部連結,要被蜘蛛抓取,就必須有導入連結進入頁面,否則蜘蛛根本不知道頁面的存在。此時的URL連結起著非常重要的作用,內鏈的重要性發揮出來了。
另外,古月建站覺得高質量的導入連結也經常使頁面上的導出連結被爬行的深度增加。
這也就是為什麼大多數站長或SEO都要高質量友情連結,因為蜘蛛從對方網站爬行到你網站之次數多,深度也高。
4、與首頁點擊距離
一般來說網站首頁權重最高,大部分外部連結都指向首頁,蜘蛛訪問最頻繁的也是首頁,離首頁點擊距離越近,頁面權重越高,被蜘蛛爬行的機會也就越大。
這也就是為什麼要求網站框架建設點擊三次就能查看完整個網站的意思。
六、蜘蛛爬行時的複製內容檢測
一般都知道在搜尋引擎索引環節中中會進行去重處理,其實在蜘蛛爬行的時候已經在進行檢測,當蜘蛛爬行和抓取文件時會進行一定程度的複製內容檢測,遇到權重低的網站上大量轉載或抄襲內容時,很可能不再繼續爬行。
所以對於新站來說切莫採集和抄襲,這也就是為什麼很多站長查看日誌的時候發現了蜘蛛,但是頁面從來沒有被抓取的原因,因為爬行發現是重複內容那麼它講放棄抓取也就只停留在爬行過的階段。
古月建站博客點評:
雖說蜘蛛的作用就是讓搜尋引擎對有效連結進行搜尋,但並不意味著蜘蛛越多越好,有時過多的蜘蛛來網站抓取會造成一定的負面效果,會影響伺服器的運行,導致網頁打開緩慢。