1. 程式人生 > >Python爬蟲從入門到放棄(十)之 關於深度優先和廣度優先

Python爬蟲從入門到放棄(十)之 關於深度優先和廣度優先

  • 網站的樹結構
  • 深度優先演算法和實現
  • 廣度優先演算法和實現

網站的樹結構

通過伯樂線上網站為例子:

並且我們通過訪問伯樂線上也是可以發現,我們從任何一個子頁面其實都是可以返回到首頁,所以當我們爬取頁面的資料的時候就會涉及到去重的問題,我們需要將爬過的url記錄下來,我們將上圖進行更改

在爬蟲系統中,待抓取URL佇列是很重要的一部分,待抓取URL佇列中的URL以什麼樣的順序排佇列也是一個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面是常用的兩種策略:深度優先、廣度優先 

深度優先

深度優先是指網路爬蟲會從起始頁開始,一個連結一個連結跟蹤下去,處理完這條線路之後再轉入下一個起始頁,繼續追蹤連結,通過下圖進行理解:

這裡是深度優先,所以這裡的爬取的順序式:
A-B-D-E-I-C-F-G-H (遞迴實現)

深度優先演算法的實現(虛擬碼):

廣度優先

廣度優先,有人也叫寬度優先,是指將新下載網頁發現的連結直接插入到待抓取URL佇列的末尾,也就是指網路爬蟲會先抓取起始頁中的所有網頁,然後在選擇其中的一個連線網頁,繼續抓取在此網頁中連結的所有網頁,通過下圖進行理解:

還是以這個圖為例子,廣度優先的爬取順序為:
A-B-C-D-E-F-G-H-I (佇列實現)

廣度優先程式碼的實現(虛擬碼):