科普:爬蟲

weixin_33976072發表於2018-06-29

爬蟲是什麼

現在人們說的 Python 寫爬蟲啊之類的,爬蟲當然不是普通的那個爬蟲,而是指按照一定的規則獲取網路上資訊的程式,因為它在獲取一個網頁資訊的同時會從這個網頁上獲得URL然後再對這個URL獲取資訊,所以稱為爬蟲。

爬蟲的分類

爬蟲之間也有不同,不過大致可以分為以下幾類

通用爬蟲

這類爬蟲的目標從幾個URL擴充套件到整個網路,一般用於為搜尋引擎和Web服務提供商採集資料。這類爬蟲不太看重頁面間的聯絡,而看重獲得頁面的數量,因此對儲存空間有一定要求。

聚焦爬蟲

這類爬蟲主要根據選定好的主題來搜尋頁面,主要來滿足對特定領域資訊的需求,儲存的頁面數量不多,可以節省網路資源與儲存空間。

增量爬蟲

這類爬蟲主要是對新產生或是發生變化的網頁來搜尋的爬蟲,雖然這樣也可以避免重複爬行造成空間與網路資源浪費,但是所需要的演算法比其他爬蟲更復雜。

Deep Web 爬蟲

這些爬蟲主要對不能夠通過連結進入的頁面進行搜尋,比如說註冊後可見的頁面等等。這類爬蟲通常需要一個附帶具有填寫表單的能力之類的輔助模組來幫助進入之後的頁面。


10430217-61bb8a3a050695a1.png
科普:爬蟲

爬蟲的各種搜尋策略

IP地址搜尋

IP 地址搜尋策略是先給爬蟲一個起始的 IP 地址,然後根據 IP 地址以遞增的方式搜尋本 IP 地址段後的每一個地址中的文件,它完全不考慮各文件中指向其它 Web 站點的超級連結地址。這種搜尋策略的優點是搜尋比較全面,因此能夠發現那些沒被其它文件引用的新文件的資訊源;但是缺點是不適合大規模搜尋。

深度優先搜尋

深度優先搜尋是一種在開發爬蟲早期使用較多的方法。它的目的是要達到被搜尋結構的葉結點(即那些不包含任何超鏈的 HTML 檔案)。例如,在一個 HTML 檔案中,當一個超鏈被選擇後,被連結的 HTML 檔案將執行深度優先搜尋,也就是說在搜尋其餘的超鏈結果之前必須先完整地搜尋單獨的一條鏈。深度優先搜尋沿著 HTML 檔案上的超鏈走到不能再深入為止,然後返回到某一個 HTML 檔案,再繼續選擇該 HTML 檔案中的其他超鏈。當不再有其他超鏈可選擇時,說明搜尋已經結束。

寬度優先搜尋

寬度優先搜尋的過程是先搜尋完一個 Web 頁面中所有的超級連結,然後再繼續搜尋下一層,直到底層為止。例如,一個 HTML 檔案中有三個超鏈,選擇其中之一併處理相應的HTML檔案,然後不再選擇第二個 HTML 檔案中的任何超鏈,而是返回並選擇第二個超鏈,處理相應的 HTML 檔案,再返回,選擇第三個超鏈並處理相應的 HTML 檔案。當一層上的所有超鏈都已被選擇過,就可以開始在剛才處理過的 HIML 檔案中搜尋其餘的超鏈。

寬度優先搜尋的優點:一個是保證了對淺層的優先處理,當遇到一個無窮盡的深層分支時,不會導致陷進深層文件中出現出不來的情況發生;另一個是它能在兩個 HTML 檔案之間找到最短路徑。

寬度優先搜尋策略通常是實現爬蟲的最佳策略,因為它容易實現,而且具備大多數期望的功能。但是如果要遍歷一個指定的站點或者深層巢狀的 HTML 檔案集,用寬度優先搜尋策略則需要花費比較長的時間才能到達深層的 HTML 檔案。

爬蟲面臨的問題

截止到 2007 年底,Internet 上網頁數量超出 160 億個,研究表明接近 30%的頁面是重複的;動態頁面的存在:客戶端、伺服器端指令碼語言的應用使得指向相同 Web 資訊的 URL 數量呈指數級增長。 上述特徵使得網路爬蟲面臨一定的困難,主要體現在 Web 資訊的巨大容量使得爬蟲在給定時間內只能下載少量網頁。 Lawrence 和 Giles 的研究表明沒有哪個搜尋引擎能夠索引超出 16%的 Internet 上 Web 頁面,即使能夠提取全部頁面,也沒有足夠的空間來儲存。
為提高爬行效率,爬蟲需要在單位時間內儘可能多的獲取高質量頁面,這也是是它面臨的難題之一。 當前有五種表示頁面質量高低的方式:Similarity(頁面與爬行主題之間的相似度)、Backlink(頁面在 Web 圖中的入度大小)、PageRank(指向它的所有頁面平均權值之和)、Forwardlink(頁面在 Web 圖中的出度大小)、Location(頁面的資訊位置)。

Parallel(並行性問題):為了提高爬行速度,網路通常會採取並行爬行的工作方式,隨之引入了新的問題:

重複性:並行執行的爬蟲或爬行執行緒同時執行時增加了重複頁面

質量問題:並行執行時,每個爬蟲或爬行執行緒只能獲取部分頁面,導致頁面質量下降

通訊頻寬代價:並行執行時,各個爬蟲或爬行執行緒之間不可避免要進行一些通訊

並行執行時,網路爬蟲通常採用三種方式:獨立方式(各個爬蟲獨立爬行頁面,互不通訊)、動態分配方式(由一箇中央協調器動態協調分配 URL 給各個爬蟲)、靜態分配方式(URL 事先劃分給各個爬蟲)。

相關文章