現(xiàn)在人們說的 python 寫爬蟲啊之類的,爬蟲當(dāng)然不是普通的那個爬蟲,而是指按照一定的規(guī)則獲取網(wǎng)絡(luò)上信息的程序,因為它在獲取一個網(wǎng)頁信息的同時會從這個網(wǎng)頁上獲得url然后再對這個url獲取信息,所以稱為爬蟲。
爬蟲之間也有不同,不過大致可以分為以下幾類
這類爬蟲的目標(biāo)從幾個URL擴展到整個網(wǎng)絡(luò),一般用于為搜索引擎和Web服務(wù)提供商采集數(shù)據(jù)。這類爬蟲不太看重頁面間的聯(lián)系,而看重獲得頁面的數(shù)量,因此對存儲空間有一定要求。
這類爬蟲主要根據(jù)選定好的主題來搜索頁面,主要來滿足對特定領(lǐng)域信息的需求,保存的頁面數(shù)量不多,可以節(jié)省網(wǎng)絡(luò)資源與存儲空間。
這類爬蟲主要是對新產(chǎn)生或是發(fā)生變化的網(wǎng)頁來搜尋的爬蟲,雖然這樣也可以避免重復(fù)爬行造成空間與網(wǎng)絡(luò)資源浪費,但是所需要的算法比其他爬蟲更復(fù)雜。
這些爬蟲主要對不能夠通過鏈接進入的頁面進行搜索,比如說注冊后可見的頁面等等。這類爬蟲通常需要一個附帶具有填寫表單的能力之類的輔助模塊來幫助進入之后的頁面。
IP 地址搜索策略是先給爬蟲一個起始的 IP 地址,然后根據(jù) IP 地址以遞增的方式搜索本 IP 地址段后的每一個地址中的文檔,它完全不考慮各文檔中指向其它 Web 站點的超級鏈接地址。這種搜索策略的優(yōu)點是搜索比較全面,因此能夠發(fā)現(xiàn)那些沒被其它文檔引用的新文檔的信息源;但是缺點是不適合大規(guī)模搜索。
深度優(yōu)先搜索是一種在開發(fā)爬蟲早期使用較多的方法。它的目的是要達到被搜索結(jié)構(gòu)的葉結(jié)點(即那些不包含任何超鏈的 html 文件)。例如,在一個 HTML 文件中,當(dāng)一個超鏈被選擇后,被鏈接的 HTML 文件將執(zhí)行深度優(yōu)先搜索,也就是說在搜索其余的超鏈結(jié)果之前必須先完整地搜索單獨的一條鏈。深度優(yōu)先搜索沿著 HTML 文件上的超鏈走到不能再深入為止,然后返回到某一個 HTML 文件,再繼續(xù)選擇該 HTML 文件中的其他超鏈。當(dāng)不再有其他超鏈可選擇時,說明搜索已經(jīng)結(jié)束。
寬度優(yōu)先搜索的過程是先搜索完一個 Web 頁面中所有的超級鏈接,然后再繼續(xù)搜索下一層,直到底層為止。例如,一個 HTML 文件中有三個超鏈,選擇其中之一并處理相應(yīng)的HTML文件,然后不再選擇第二個 HTML 文件中的任何超鏈,而是返回并選擇第二個超鏈,處理相應(yīng)的 HTML 文件,再返回,選擇第三個超鏈并處理相應(yīng)的 HTML 文件。當(dāng)一層上的所有超鏈都已被選擇過,就可以開始在剛才處理過的 HIML 文件中搜索其余的超鏈。
寬度優(yōu)先搜索的優(yōu)點:一個是保證了對淺層的優(yōu)先處理,當(dāng)遇到一個無窮盡的深層分支時,不會導(dǎo)致陷進深層文檔中出現(xiàn)出不來的情況發(fā)生;另一個是它能在兩個 HTML 文件之間找到最短路徑。
寬度優(yōu)先搜索策略通常是實現(xiàn)爬蟲的最佳策略,因為它容易實現(xiàn),而且具備大多數(shù)期望的功能。但是如果要遍歷一個指定的站點或者深層嵌套的 HTML 文件集,用寬度優(yōu)先搜索策略則需要花費比較長的時間才能到達深層的 HTML 文件。
截止到 2007 年底,Internet 上網(wǎng)頁數(shù)量超出 160 億個,研究表明接近 30%的頁面是重復(fù)的;動態(tài)頁面的存在:客戶端、服務(wù)器端腳本語言的應(yīng)用使得指向相同 Web 信息的 URL 數(shù)量呈指數(shù)級增長。 上述特征使得網(wǎng)絡(luò)爬蟲面臨一定的困難,主要體現(xiàn)在 Web 信息的巨大容量使得爬蟲在給定時間內(nèi)只能下載少量網(wǎng)頁。 Lawrence 和 Giles 的研究表明沒有哪個搜索引擎能夠索引超出 16%的 Internet 上 Web 頁面,即使能夠提取全部頁面,也沒有足夠的空間來存儲。
為提高爬行效率,爬蟲需要在單位時間內(nèi)盡可能多的獲取高質(zhì)量頁面,這也是是它面臨的難題之一。 當(dāng)前有五種表示頁面質(zhì)量高低的方式:Similarity(頁面與爬行主題之間的相似度)、Backlink(頁面在 Web 圖中的入度大小)、PageRank(指向它的所有頁面平均權(quán)值之和)、Forwardlink(頁面在 Web 圖中的出度大小)、location(頁面的信息位置)。
Parallel(并行性問題):為了提高爬行速度,網(wǎng)絡(luò)通常會采取并行爬行的工作方式,隨之引入了新的問題:
重復(fù)性:并行運行的爬蟲或爬行線程同時運行時增加了重復(fù)頁面
質(zhì)量問題:并行運行時,每個爬蟲或爬行線程只能獲取部分頁面,導(dǎo)致頁面質(zhì)量下降
通信帶寬代價:并行運行時,各個爬蟲或爬行線程之間不可避免要進行一些通信
并行運行時,網(wǎng)絡(luò)爬蟲通常采用三種方式:獨立方式(各個爬蟲獨立爬行頁面,互不通信)、動態(tài)分配方式(由一個中央?yún)f(xié)調(diào)器動態(tài)協(xié)調(diào)分配 URL 給各個爬蟲)、靜態(tài)分配方式(URL 事先劃分給各個爬蟲)。