網絡爬蟲經過遍歷網頁的節點,把網頁中的內容抓取下來。網絡
將一個頁面比做是一個節點,將URL看做是一個從原網頁指向目標頁面的有向邊。所以一個url下的網絡接口能夠看作是從一個源節點出發,造成的有限或無限的有向圖。爬蟲就是負責遍歷這些節點,將每一個節點中的網頁內容保存到本地。url
深度優先就是優先遍歷子頁面,噹噹前頁面沒有子頁面是才返回,遍歷第二個子頁面。通常須要維護一個棧,保存訪問的路徑。將棧頂頁面的第一個未訪問的子頁面添加到棧中。當棧頂不存在未訪問的子頁面時,將它退棧,繼續訪問新棧頂頁面未訪問的子頁面。
這種遍歷方式容易形成爬蟲在一條過長的路徑上浪費過多的時間。排序
爬蟲優先遍歷當前節點的全部子頁面。這須要維護一個隊列操做,首先抓取隊列中全部url的頁面內容,而後依次將隊首的url中的子頁面url添加到隊尾,而後將此url出隊,直到全部已訪問的url所有出隊。這種遍歷方式的弊端顯而易見,即抓取數據量隨着層數的增長呈指數級別增長。接口
與當前頁面相關度大的鏈接每每與當前頁面的距離越近,所以採用寬度優先能夠更集中的得到有意義的頁面。可是廣告以及一些與頁面無關的鏈接會白白增大抓取工做的工做量。所以我麼須要爲全部鏈接創建一種評估機制,優先抓取一些等級高的頁面,將一些優先級低的頁面放在後面抓取甚至是不抓取。隊列
1. 大站優先策略
維護一個優先級隊列,對隊列中的全部url按照其所包含的子頁面數量進行排序,數量高的放在前面。搜索
2. 反向連接數策略
優先遍歷隊列中指向它的連接數多的頁面。這隻又在擁有十分龐大的頁面數據時纔可使用(吧)遍歷
3. 網頁排名
爲每一個網頁賦予必定的重要性數值。當存在從A指向B的鏈接時,則將A的重要性分攤給B一部分。這樣,外部連接多的頁面,以及無關鏈接少的頁面,得分會比較高。數據