Baiduspider 主要抓取策略型別
Baiduspider 在抓取過程中面對的是一個超級複雜的網路環境,為了使系統可以抓取到儘可能多的有價值資源並保持系統及實際環境中頁面的一致性同時不給網站體驗造成壓力,會設計多種複雜的抓取策略。以下做簡單介紹:
1 、抓取友好性
網際網路資源龐大的數量級,這就要求抓取系統儘可能的高效利用頻寬,在有限的硬體和頻寬資源下儘可能多的抓取到有價值資源。這就造成了另一個問題,耗費被抓網站的頻寬造成訪問壓力,如果程度過大將直接影響被抓網站的正常多使用者訪問行為。因此,在抓取過程中就要進行一定的抓取壓力控制,達到既不影響網站的正常多使用者訪問又能儘量多的抓取到有價值資源的目的。
通常情況下,基本的是基於 ip 的壓力控制。這是因為如果基於域名,可能存在一個域名對多個 ip(很多大網站)或多個域名對應同一個 ip(小網站共享 ip)的問題。實際中,往往根據 ip 及域名的多種條件進行壓力調配控制。同時,站群站長平臺也推出了壓力反饋工具,站群站長可以人工調配對自己網站的抓取壓力,這時百度 spider 將優先按照站群站長的要求進行抓取壓力控制。
對同一個站點的抓取速度控制一般分為兩類:其一,一段時間內的抓取頻率;其二,一段時間內的抓取流量。同一站點不同的時間抓取速度也會不同,例如夜深人靜月黑風高時候抓取的可能就會快一些,也視具體站點型別而定,主要思想是錯開正常多使用者訪問高峰,不斷的調整。對於不同站點,也需要不同的抓取速度。
2 、常用抓取返回碼示意
簡單介紹幾種百度支援的返回碼:
1)常見的 404 代表 “NOTFOUND”,認為網頁已經失效,通常將在庫中刪除,同時短期內如果 spider 再次發現這條 url 也不會抓取;
2)503 代表 “ServiceUnavailable”,認為網頁臨時不可訪問,通常網站臨時關閉,頻寬有限等會產生這種情況。對於網頁返回 503 狀態碼,百度 spider 不會把這條 url 直接刪除,同時短期內將會反覆訪問幾次,如果網頁已恢復,則正常抓取;如果繼續返回 503,那麼這條 url 仍會被認為是失效連結,從庫中刪除。
3)403 代表 “Forbidden”,認為網頁目前禁止訪問。如果是新 url,spider 暫時不抓取,短期內同樣會反覆訪問幾次;如果是已收錄 url,不會直接刪除,短期內同樣反覆訪問幾次。如果網頁正常訪問,則正常抓取;如果仍然禁止訪問,那麼這條 url 也會被認為是失效連結,從庫中刪除。
4)301 代表是 “MovedPermanently”,認為網頁重定向至新 url 。當遇到站點遷移、域名更換、站點改版的情況時,我們推薦使用 301 返回碼,同時使用站群站長平臺網站改版工具,以減少改版對網站流量造成的損失。
3 、多種 url 重定向的識別
網際網路中一部分網頁因為各種各樣的原因存在 url 重定向狀態,為了對這部分資源正常抓取,就要求 spider 對 url 重定向進行識別判斷,同時防止作弊行為。重定向可分為三類:http30x 重定向、 metarefresh 重定向和 js 重定向。另外,百度也支援 Canonical 標籤,在效果上可以認為也是一種間接的重定向。
4 、抓取優先順序調配
由於網際網路資源規模的巨大以及迅速的變化,對於搜尋引擎來說全部抓取到併合理的更新保持一致性幾乎是不可能的事情,因此這就要求抓取系統設計一套合理的抓取優先順序調配策略。主要包括:深度優先遍歷策略、寬度優先遍歷策略、 pr 優先策略、反鏈策略、社會化分享指導策略等等。每個策略各有優劣,在實際情況中往往是多種策略結合使用以達到優的抓取效果。
5 、重複 url 的過濾
spider 在抓取過程中需要判斷一個頁面是否已經抓取過了,如果還沒有抓取再進行抓取網頁的行為並放在已抓取網址集合中。判斷是否已經抓取其中涉及到核心的是快速查詢並對比,同時涉及到 url 歸一化識別,例如一個 url 中包含大量無效引數而實際是同一個頁面,這將視為同一個 url 來對待。
6 、暗網資料的獲取
網際網路中存在著大量的搜尋引擎暫時無法抓取到的資料,被稱為暗網資料。一方面,很多網站的大量資料是存在於網路資料庫中,spider 難以採用抓取網頁的方式獲得完整內容;另一方面,由於網路環境、網站本身不符合規範、孤島等等問題,也會造成搜尋引擎無法抓取。目前來說,對於暗網資料的獲取主要思路仍然是透過開放平臺採用資料提交的方式來解決,例如 “百度站群站長平臺”“百度開放平臺” 等等。
7 、抓取反作弊
spider 在抓取過程中往往會遇到所謂抓取黑洞或者面臨大量低質量頁面的困擾,這就要求抓取系統中同樣需要設計一套完善的抓取反作弊系統。例如分析 url 特徵、分析頁面大小及內容、分析站點規模對應抓取規模等等。