全程干貨 | 入門爬蟲技術(shù)原理,看這篇就夠了

爬蟲系統(tǒng)的誕生

蜘蛛爬蟲

通用搜索引擎的處理對象是互聯(lián)網(wǎng)網(wǎng)頁草穆,目前互聯(lián)網(wǎng)網(wǎng)頁的數(shù)量已達百億灌灾,所以搜索引擎首先面臨的問題是:如何能夠設(shè)計出高效的下載系統(tǒng),以將如此海量的網(wǎng)頁數(shù)據(jù)傳送到本地悲柱,在本地形成互聯(lián)網(wǎng)網(wǎng)頁的鏡像備份锋喜。

網(wǎng)絡(luò)爬蟲能夠起到這樣的作用,完成此項艱巨的任務(wù),它是搜索引擎系統(tǒng)中很關(guān)鍵也很基礎(chǔ)的構(gòu)件嘿般。本文主要介紹與網(wǎng)絡(luò)爬蟲相關(guān)的技術(shù)段标,盡管爬蟲經(jīng)過幾十年的發(fā)展,從整體框架上來看已經(jīng)相對成熟炉奴,但隨著互聯(lián)網(wǎng)的不斷發(fā)展逼庞,也面臨著一些新的挑戰(zhàn)。


通用爬蟲技術(shù)框架

爬蟲系統(tǒng)首先從互聯(lián)網(wǎng)頁面中精心選擇一部分網(wǎng)頁盆佣,以這些網(wǎng)頁的鏈接地址作為種子URL往堡,將這些種子放入待抓取URL隊列中,爬蟲從待抓取URL隊列依次讀取共耍,并將URL通過DNS解析,把鏈接地址轉(zhuǎn)換為網(wǎng)站服務(wù)器對應(yīng)的IP地址吨瞎。然后將其和網(wǎng)頁相對路徑名稱交給網(wǎng)頁下載器痹兜,網(wǎng)頁下載器負(fù)責(zé)頁面的下載。對于下載到本地的網(wǎng)頁颤诀,一方面將其存儲到頁面庫中字旭,等待建立索引等后續(xù)處理;另一方面將下載網(wǎng)頁的URL放入已抓取隊列中崖叫,這個隊列記錄了爬蟲系統(tǒng)已經(jīng)下載過的網(wǎng)頁URL遗淳,以避免系統(tǒng)的重復(fù)抓取。對于剛下載的網(wǎng)頁心傀,從中抽取出包含的所有鏈接信息屈暗,并在已下載的URL隊列中進行檢查,如果發(fā)現(xiàn)鏈接還沒有被抓取過脂男,則放到待抓取URL隊列的末尾养叛,在之后的抓取調(diào)度中會下載這個URL對應(yīng)的網(wǎng)頁。如此這般宰翅,形成循環(huán)弃甥,直到待抓取URL隊列為空,這代表著爬蟲系統(tǒng)將能夠抓取的網(wǎng)頁已經(jīng)悉數(shù)抓完汁讼,此時完成了一輪完整的抓取過程淆攻。

通用爬蟲架構(gòu)

上述是一個通用爬蟲的整體流程,如果從更加宏觀的角度考慮嘿架,處于動態(tài)抓取過程中的爬蟲和互聯(lián)網(wǎng)所有網(wǎng)頁之間的關(guān)系瓶珊,可以概括為以下5個部分:

已下載網(wǎng)頁結(jié)合:爬蟲已經(jīng)從互聯(lián)網(wǎng)下載到本地進行索引的網(wǎng)頁集合。

已過期網(wǎng)頁結(jié)合:由于網(wǎng)頁數(shù)量龐大眶明,爬蟲完整抓取一輪需要較長時間艰毒,在抓取過程中,很多已下載的網(wǎng)頁可能已經(jīng)更新了搜囱,從而導(dǎo)致過期丑瞧。之所以如此柑土,是因為互聯(lián)網(wǎng)網(wǎng)頁處于不斷的動態(tài)變化過程中,所以易產(chǎn)生本地網(wǎng)頁內(nèi)容和真實互聯(lián)網(wǎng)不一致的情況绊汹。

待下載網(wǎng)頁集合:處于待抓取URL隊列中的網(wǎng)頁稽屏,這些網(wǎng)頁即將被爬蟲下載。

可知網(wǎng)頁集合:這些網(wǎng)頁還沒有被爬蟲下載西乖,也沒有出現(xiàn)在待抓取URL隊列中狐榔,通過已經(jīng)抓取的網(wǎng)頁或者在待抓取URL隊列中的網(wǎng)頁,總是能夠通過鏈接關(guān)系發(fā)現(xiàn)它們获雕,稍晚時候會被爬蟲抓取并索引薄腻。

未知網(wǎng)頁集合:有些網(wǎng)頁對于爬蟲是無法抓取到的,這部分網(wǎng)頁構(gòu)成了未知網(wǎng)頁結(jié)合届案。事實上庵楷,這部分網(wǎng)頁所占的比例很高。

互聯(lián)網(wǎng)頁面劃分

從理解爬蟲的角度看楣颠,對互聯(lián)網(wǎng)網(wǎng)頁給出如上劃分有助于深入理解搜索引擎爬蟲所面臨的主要任務(wù)和挑戰(zhàn)尽纽。絕大多數(shù)爬蟲系統(tǒng)遵循上文的流程,但是并非所有的爬蟲系統(tǒng)都如此一致童漩。根據(jù)具體應(yīng)用的不同弄贿,爬蟲系統(tǒng)在許多方面存在差異,大體而已矫膨,可以將爬蟲系統(tǒng)分為如下3種類型差凹。

批量型爬蟲:批量型爬蟲有比較明確的抓取范圍和目標(biāo),當(dāng)爬蟲達到這個設(shè)定的目標(biāo)后豆拨,即停止抓取過程直奋。至于具體目標(biāo)可能各異,也許是設(shè)定抓取一定數(shù)量的網(wǎng)頁即可施禾,也許是設(shè)定抓取的時間等脚线,各不一樣。

增量型爬蟲:增量型爬蟲與批量型爬蟲不同弥搞,會保持持續(xù)不斷的抓取邮绿,對于抓取到的網(wǎng)頁,要定期更新攀例,因為互聯(lián)網(wǎng)網(wǎng)頁處于不斷變化中船逮,新增網(wǎng)頁、網(wǎng)頁被刪除或者網(wǎng)頁內(nèi)容更改都很常見粤铭,而增量型爬蟲需要及時反映這種變化挖胃,所以處于持續(xù)不斷的抓取過程中,不是在抓取新網(wǎng)頁,就是在更新已有網(wǎng)頁酱鸭。通用的商業(yè)搜索引擎爬蟲基本都屬此類吗垮。

垂直型爬蟲:垂直型爬蟲關(guān)注特定主題內(nèi)容或者屬于特定行業(yè)的網(wǎng)頁,比如對于健康網(wǎng)站來說凹髓,只需要從互聯(lián)網(wǎng)頁面里找到與健康相關(guān)的頁面內(nèi)容即可烁登,其他行業(yè)的內(nèi)容不在考慮范圍。垂直型爬蟲一個最大的特點和難點就是:如何識別網(wǎng)頁內(nèi)容是否屬于指定行業(yè)或主題蔚舀。從節(jié)省系統(tǒng)資源的角度來講饵沧,不可能把所有互聯(lián)網(wǎng)頁面下載之后在進行篩選,這樣會造成資源過度浪費赌躺,往往需要爬蟲在抓取階段就能夠動態(tài)識別某個網(wǎng)址是否與主題相關(guān)狼牺,并盡量不去抓取無關(guān)頁面,以達到節(jié)省資源的目的寿谴。垂直搜索網(wǎng)站或者垂直行業(yè)網(wǎng)站往往需要此種類型的爬蟲锁右。


優(yōu)秀爬蟲的特性

優(yōu)秀爬蟲的特性對于不同的應(yīng)用來說,可能實現(xiàn)的方式各有差異讶泰,但是實用的爬蟲都應(yīng)該具備以下特性。

01高性能

互聯(lián)網(wǎng)的網(wǎng)頁數(shù)量是海量的拂到。所以爬蟲的性能至關(guān)重要痪署,這里的性能主要是指爬蟲下載網(wǎng)頁的抓取速度,常見的評價方式是以爬蟲每秒能夠下載的網(wǎng)頁數(shù)量作為性能指標(biāo)兄旬,單位時間能夠下載的網(wǎng)頁數(shù)量越多狼犯,爬蟲的性能越高。

要提高爬蟲的性能领铐,在設(shè)計時程序訪問磁盤的操作方法及具體實現(xiàn)時數(shù)據(jù)結(jié)構(gòu)的選擇很關(guān)鍵悯森,比如對于待抓取URL隊列和已抓取URL隊列,因為URL數(shù)量非常大绪撵,不同實現(xiàn)方式性能表現(xiàn)迥異瓢姻,所以高效的數(shù)據(jù)結(jié)構(gòu)對于爬蟲性能影響很大。

02可擴展性

即使單個爬蟲的性能很高音诈,要將所有網(wǎng)頁都下載到本地幻碱,仍然需要相當(dāng)長的時間周期,為了能夠盡可能縮短抓取周期细溅,爬蟲系統(tǒng)應(yīng)該有很好地可擴展性褥傍,即很容易通過增加抓取服務(wù)器和爬蟲數(shù)量來達到此目的。

目前實用的大型網(wǎng)絡(luò)爬蟲一定是分布式運行的喇聊,即多臺服務(wù)器專做抓取恍风,每臺服務(wù)器部署多個爬蟲,每個爬蟲多線程運行,通過多種方式增加并發(fā)性朋贬。對于巨型的搜索引擎服務(wù)商來說凯楔,可能還要在全球范圍、不同地域分別部署數(shù)據(jù)中心兄世,爬蟲也被分配到不同的數(shù)據(jù)中心啼辣,這樣對于提高爬蟲系統(tǒng)的整體性能是很有幫助的。

03健壯性

爬蟲要訪問各種類型的網(wǎng)站服務(wù)器御滩,可能會遇到很多種非正常情況鸥拧,比如網(wǎng)頁HTML編碼不規(guī)范, 被抓取服務(wù)器突然死機削解,甚至爬蟲陷阱等富弦。爬蟲對各種異常情況能否正確處理非常重要,否則可能會不定期停止工作氛驮,這是無法忍受的腕柜。

從另外一個角度來講,假設(shè)爬蟲程序在抓取過程中死掉矫废,或者爬蟲所在的服務(wù)器宕機盏缤,健壯的爬蟲應(yīng)能做到,再次啟動爬蟲時蓖扑,能夠恢復(fù)之前抓取的內(nèi)容和數(shù)據(jù)結(jié)構(gòu)唉铜,而不是每次都需要把所有工作完全從頭做起,這也是爬蟲健壯性的一種體現(xiàn)律杠。

04友好性

爬蟲的友好性包含兩方面的含義:一是保護網(wǎng)站的部分私密性潭流,另一是減少被抓取網(wǎng)站的網(wǎng)絡(luò)負(fù)載。爬蟲抓取的對象是各類型的網(wǎng)站柜去,對于網(wǎng)站所有者來說灰嫉,有些內(nèi)容并不希望被所有人搜到,所以需要設(shè)定協(xié)議嗓奢,來告知爬蟲哪些內(nèi)容是不允許抓取的讼撒。目前有兩種主流的方法可達到此目的:爬蟲禁抓協(xié)議和網(wǎng)頁禁抓標(biāo)記。

爬蟲禁抓協(xié)議指的是由網(wǎng)站所有者生成一個指定的文件robot.txt蔓罚,并放在網(wǎng)站服務(wù)器的根目錄下椿肩,這個文件指明了網(wǎng)站中哪些目錄下的網(wǎng)頁是不允許爬蟲抓取的。具有友好性的爬蟲在抓取該網(wǎng)站的網(wǎng)頁前豺谈,首先要讀取robot.txt文件郑象,對于禁止抓取的網(wǎng)頁不進行下載。

網(wǎng)頁禁抓標(biāo)記一般在網(wǎng)頁的HTML代碼里加入meta name="robots”標(biāo)記茬末,content字段指出允許或者不允許爬蟲的哪些行為厂榛「墙茫可以分為兩種情形,一種是告知爬蟲不要索引該網(wǎng)頁內(nèi)容击奶,以noindex作為標(biāo)記辈双;另外一種情形是告知爬蟲不要抓取網(wǎng)頁所包含的鏈接,以nofollow作為標(biāo)記柜砾。通過這種方式湃望,可以達到對網(wǎng)頁內(nèi)容的一種隱私保護。

遵循以上協(xié)議的爬蟲可以被認(rèn)為是友好的痰驱,這是從保護私密性的角度來考慮的证芭。另外一種友好性則是,希望爬蟲對某網(wǎng)站的訪問造成的網(wǎng)路負(fù)載較低担映。爬蟲一般會根據(jù)網(wǎng)頁的鏈接連續(xù)獲取某網(wǎng)站的網(wǎng)頁废士,如果爬蟲訪問網(wǎng)站頻率過高,會給網(wǎng)站服務(wù)器造成很大的訪問壓力蝇完,有時候甚至?xí)绊懢W(wǎng)站的正常訪問殊霞,造成類似DOS攻擊的效果密强,為了減少網(wǎng)站的網(wǎng)絡(luò)負(fù)載阀趴,友好性的爬蟲應(yīng)該在抓取策略部署時考慮每個被抓取網(wǎng)站的負(fù)載碌尔,在盡可能不影響爬蟲性能的情況下,減少對單一站點短期內(nèi)的高頻訪問朋魔。


爬蟲質(zhì)量的評價標(biāo)準(zhǔn)

如果從搜索引擎用戶體驗的角度考慮达箍,對爬蟲的工作效果有不同的評價標(biāo)準(zhǔn),其中最主要的3個標(biāo)準(zhǔn)是:抓取網(wǎng)頁的覆蓋率铺厨、抓取網(wǎng)頁時新性及抓取網(wǎng)頁重要性。如果這3方面做得好硬纤,則搜索引擎用戶體驗必定好解滓。

對于現(xiàn)有的搜索引擎來說,還不存在哪個搜索引擎有能力將互聯(lián)網(wǎng)上出現(xiàn)的所有網(wǎng)頁都下載并建立索引筝家,所有搜索引擎只能索引互聯(lián)網(wǎng)的一部分洼裤,而所謂的抓取覆蓋率指的是爬蟲抓取網(wǎng)頁的數(shù)量占互聯(lián)網(wǎng)所有網(wǎng)頁數(shù)量的比例,覆蓋率越高溪王,等價于搜索引擎的召回率越高腮鞍,用戶體驗越好。

索引網(wǎng)頁和互聯(lián)網(wǎng)網(wǎng)頁對比

抓取到本地的網(wǎng)頁莹菱,很有可能已經(jīng)發(fā)生變化移国,或者被刪除,或者內(nèi)容被更改道伟,因為爬蟲抓取完一輪需要較長的時間周期迹缀,所以抓取到的網(wǎng)頁當(dāng)中必然會有一部分是過期的數(shù)據(jù)使碾,即不能在網(wǎng)頁變化后第一時間反應(yīng)到網(wǎng)頁庫中,所以網(wǎng)頁庫中過期的數(shù)據(jù)越少祝懂,則網(wǎng)頁的時新性越好票摇,這對用戶體驗的改善大有裨益。如果時新性不好砚蓬,搜索到的都是過期數(shù)據(jù)矢门,或者網(wǎng)頁被刪除,用戶的內(nèi)心感受可想而知灰蛙。

互聯(lián)網(wǎng)盡管網(wǎng)頁繁多祟剔,但是每個網(wǎng)頁的差異性都很大,比如來自騰訊缕允、網(wǎng)易新聞的網(wǎng)頁和某個作弊網(wǎng)頁相比峡扩,其重要性猶如天壤之別。如果搜索引擎抓取到的網(wǎng)頁大部分是比較重要的網(wǎng)頁障本,則可以說明在抓取網(wǎng)頁重要性方面做得比較好教届。這方面做的越好,則越說明搜索引擎的搜索精度越高驾霜。

通過以上3個標(biāo)準(zhǔn)的說明分析案训,可以將爬蟲研發(fā)的目標(biāo)簡單描述如下:在資源有限的情況下,既然搜索引擎只能抓取互聯(lián)網(wǎng)現(xiàn)存網(wǎng)頁的一部分粪糙,那么就盡可能給選擇比較重要的那部分頁面來索引强霎;對于已經(jīng)抓取到的網(wǎng)頁,盡可能快的更新內(nèi)容蓉冈,使得索引網(wǎng)頁和互聯(lián)網(wǎng)對應(yīng)頁面內(nèi)容同步更新城舞;在此基礎(chǔ)上,盡可能擴大抓取范圍寞酿,抓取到更多以前無法發(fā)現(xiàn)的網(wǎng)頁家夺。3個“”盡可能”基本說清楚了爬蟲系統(tǒng)為增強用戶體驗而奮斗的目標(biāo)。

大型商業(yè)搜索引擎為了滿足3個質(zhì)量標(biāo)準(zhǔn)伐弹,大都開發(fā)了多套針對性很強的爬蟲系統(tǒng)拉馋。以Google為例,至少包含兩套不同的爬蟲系統(tǒng)惨好,一套被稱為Fresh Bot煌茴,主要考慮網(wǎng)頁的時新性,對于內(nèi)容更新頻繁的網(wǎng)頁日川,目前可以達到以秒計的更新周期蔓腐;另外一套被稱之為Deep Crawl Bot,主要針對更新不是那么頻繁的網(wǎng)頁抓取逗鸣,以天為更新周期合住。除此之外绰精,Google投入了很大精力研發(fā)針對暗網(wǎng)的抓取系統(tǒng),后續(xù)透葛,有時間在說明暗網(wǎng)系統(tǒng)笨使。

Google的兩套爬蟲系統(tǒng)

如果您對爬蟲有興趣,還可以閱讀:

全程干貨 | 解密爬蟲抓取僚害、更新網(wǎng)頁的策略方法

網(wǎng)絡(luò)爬蟲 | 你不知道的暗網(wǎng)是如何被抓取的硫椰?

網(wǎng)絡(luò)爬蟲 | 你知道分布式爬蟲是如何工作的嗎?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萨蚕,一起剝皮案震驚了整個濱河市靶草,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岳遥,老刑警劉巖奕翔,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浩蓉,居然都是意外死亡派继,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門捻艳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驾窟,“玉大人,你說我怎么就攤上這事认轨∩鹇纾” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵嘁字,是天一觀的道長恩急。 經(jīng)常有香客問我,道長纪蜒,這世上最難降的妖魔是什么假栓? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮霍掺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拌蜘。我一直安慰自己杆烁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布简卧。 她就那樣靜靜地躺著兔魂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪举娩。 梳的紋絲不亂的頭發(fā)上析校,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天构罗,我揣著相機與錄音,去河邊找鬼智玻。 笑死遂唧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吊奢。 我是一名探鬼主播盖彭,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼页滚!你這毒婦竟也來了召边?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裹驰,失蹤者是張志新(化名)和其女友劉穎隧熙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻林,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡贞盯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滋将。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邻悬。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖随闽,靈堂內(nèi)的尸體忽然破棺而出父丰,到底是詐尸還是另有隱情,我是刑警寧澤掘宪,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布蛾扇,位于F島的核電站,受9級特大地震影響魏滚,放射性物質(zhì)發(fā)生泄漏镀首。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一鼠次、第九天 我趴在偏房一處隱蔽的房頂上張望更哄。 院中可真熱鬧,春花似錦腥寇、人聲如沸成翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻敌。三九已至,卻和暖如春掂摔,著一層夾襖步出監(jiān)牢的瞬間术羔,已是汗流浹背赢赊。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留级历,地道東北人释移。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像鱼喉,于是被迫代替她去往敵國和親秀鞭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 從這篇博客開始來具體的說搜索引擎的每一個核心模塊扛禽,先從爬蟲系統(tǒng)說起吧锋边! 先來個大綱: 1、從爬蟲的設(shè)計角度看编曼,優(yōu)秀...
    雨林木風(fēng)博客閱讀 6,567評論 2 16
  • 搜索引擎優(yōu)化(Search engine optimization豆巨,簡稱SEO),指為了提升網(wǎng)頁在搜索引擎自然搜索...
    翻滾吧海闊天空閱讀 4,013評論 5 14
  • 這個系列的第六個主題掐场,主要談一些搜索引擎相關(guān)的常見技術(shù)往扔。 1995年是搜索引擎商業(yè)公司發(fā)展的重要起點,《淺談推薦系...
    我偏笑_NSNirvana閱讀 6,633評論 3 24
  • 看書之前熊户,看過了《成為簡·奧斯汀》萍膛,《勸導(dǎo)》這兩部電影,以及作者簡介嚷堡。所以才在書香節(jié)時蝗罗,看到這本書買了下去。 看書...
    Alian__閱讀 463評論 0 0
  • Day.2 一張又一張思維導(dǎo)圖的練習(xí)蝌戒,其實就是讓自己逐漸養(yǎng)成行動串塑、身體和思考的習(xí)慣。沒接觸思維導(dǎo)圖前北苟,非常多的時候...
    慧濤閱讀 395評論 2 1