本篇文章旨在對爬蟲這一概念做一個簡單的介紹,希望能讓讀者朋友們對爬蟲有初步的了解與認識

爬蟲是什麼

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

爬蟲的分類

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

通用爬蟲

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

聚焦爬蟲

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

增量爬蟲

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

Deep Web 爬蟲

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

爬蟲的各種搜索策略

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 事先劃分給各個爬蟲)。