引入:我們在百度首頁輸入關鍵字,百度一下,相關的内容就會立馬呈現出來,這個動作的背後到底隐藏着哪些操作?
其實百度的核心搜尋引擎就是一個大型的分布式網絡爬蟲程式。
什麼是網絡爬蟲? 詳見:
網絡爬蟲的主要目的是将網際網路上的網頁下載下傳到本地形成一個或聯網内容的鏡像備份。這篇部落客要對爬蟲以及抓取系統進行一個簡單的概述。
一、網絡爬蟲的基本結構及工作流程
一個通用的網絡爬蟲的架構如圖所示:

網絡爬蟲的基本工作流程如下:
2.将這些URL放入待抓取URL隊列;
3.從待抓取URL隊列中取出待抓取在URL,解析DNS,并且得到主機的ip,并将URL對應的網頁下載下傳下來,存儲進已下載下傳網頁庫中。此外,将這些URL放進已抓取URL隊列。
4.分析已抓取URL隊列中的URL,分析其中的其他URL,并且将URL放入待抓取URL隊列,進而進入下一個循環。
二、從爬蟲的角度對網際網路進行劃分
對應的,可以将網際網路的所有頁面分為五個部分:
1.已下載下傳未過期網頁
2.已下載下傳已過期網頁:抓取到的網頁實際上是網際網路内容的一個鏡像與備份,網際網路是動态變化的,一部分網際網路上的内容已經發生了變化,這時,這部分抓取到的網頁就已經過期了。
3.待下載下傳網頁:也就是待抓取URL隊列中的那些頁面
4.可知網頁:還沒有抓取下來,也沒有在待抓取URL隊列中,但是可以通過對已抓取頁面或者待抓取URL對應頁面進行分析擷取到的URL,認為是可知網頁。
5.還有一部分網頁,爬蟲是無法直接抓取下載下傳的。稱為不可知網頁。
三、抓取政策
在爬蟲系統中,待抓取URL隊列是很重要的一部分。待抓取URL隊列中的URL以什麼樣的順序排列也是一個很重要的問題,因為這涉及到先抓取那個頁面,後抓取哪個頁面。而決定這些URL排列順序的方法,叫做抓取政策。下面重點介紹幾種常見的抓取政策:
1.深度優先周遊政策
深度優先周遊政策是指網絡爬蟲會從起始頁開始,一個連結一個連結跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續跟蹤連結。我們以下面的圖為例:
周遊的路徑:A-F-G E-H-I B C D
2.橫向優先搜尋政策
橫向優先搜尋政策的基本思路是,将新下載下傳網頁中發現的連結直接插入待抓取URL隊列的末尾。也就是指網絡爬蟲會先抓取起始網頁中連結的所有網頁,然後再選擇其中的一個連結網頁,繼續抓取在此網頁中連結的所有網頁。還是以上面的圖為例:
周遊路徑:A-B-C-D-E-F G H I
而我們在實際爬蟲運用中很少用到DFS的周遊政策,原因是深度優先政策很容易陷入網絡黑洞,而且不好控制深入的深度。
3.反向連結數政策
反向連結數是指一個網頁被其他網頁連結指向的數量。反向連結數表示的是一個網頁的内容受到其他人的推薦的程度。是以,很多時候搜尋引擎的抓取系統會使用這個名額來評價網頁的重要程度,進而決定不同網頁的抓取先後順序。
在真實的網絡環境中,由于廣告連結、作弊連結的存在,反向連結數不能完全等他我那個也的重要程度。是以,搜尋引擎往往考慮一些可靠的反向連結數。
4.Partial PageRank政策
Partial PageRank算法借鑒了PageRank算法的思想:對于已經下載下傳的網頁,連同待抓取URL隊列中的URL,形成網頁集合,計算每個頁面的PageRank值,計算完之後,将待抓取URL隊列中的URL按照PageRank值的大小排列,并按照該順序抓取頁面。
如果每次抓取一個頁面,就重新計算PageRank值,一種折中方案是:每抓取K個頁面後,重新計算一次PageRank值。但是這種情況還會有一個問題:對于已經下載下傳下來的頁面中分析出的連結,也就是我們之前提到的未知網頁那一部分,暫時是沒有PageRank值的。為了解決這個問題,會給這些頁面一個臨時的PageRank值:将這個網頁所有傳入連結傳遞進來的PageRank值進行彙總,這樣就形成了該未知頁面的PageRank值,進而參與排序。下面舉例說明:
5.OPIC政策政策
該算法實際上也是對頁面進行一個重要性打分。在算法開始前,給所有頁面一個相同的初始現金(cash)。當下載下傳了某個頁面P之後,将P的現金分攤給所有從P中分析出的連結,并且将P的現金清空。對于待抓取URL隊列中的所有頁面按照現金數進行排序。
6.大站優先政策
對于待抓取URL隊列中的所有網頁,根據所屬的網站進行分類。對于待下載下傳頁面數多的網站,優先下載下傳。這個政策也是以叫做大站優先政策。
參考書目:
1.《這就是搜尋引擎——核心技術詳解》 張俊林 電子工業出版社
2.《搜尋引擎技術基礎》 劉奕群等 清華大學出版社
個人推薦書籍:
1.《自己動手寫網絡爬蟲》 羅剛 王振東 清華大學出版社