菜鳥也想玩搜索引擎——爬蟲部分技術要點淺析(補充)


  時隔這么久,繼續開寫。本文系上一篇的補充:爬蟲部分技術要點淺析

  本次將主要討論上次提出的后兩個問題:如何處理抽取出來的Url

3、如何處理抽取出來的Url(爬取策略)?

  所謂爬取策略,就是網絡爬蟲從種子網址開始,應該按照怎樣的順序向下爬取。以下是幾種典型的爬取策略(既然是淺析,這里只做介紹,想要深入了解請自行查閱資料):

  (1)深度優先策略

    看到這個名詞估計多數人立馬都會明白,該策略的實現思路采用的是圖的深度遍歷。事實上當我們通常把網絡看做一個圖,網絡中每個頁面看做圖中節點,這樣在考慮遍歷的問題時,很自然的就會使用圖的遍歷方法(其實也就是樹的深度優先遍歷)。看下圖:

  

    按照深度優先遍歷,順序是:A-->B-->C-->D-->E-->F-->G-->H。

    這里需要說的是在多數情況下,全局的爬去策略是不會采取這種方法的,對於復雜的網路圖而言,勇往直前並不見得好,而且特別是實現時使用並行處理時很難控制。

    參考:深度優先策略

  (2)廣度優先策略

    這個和第一個相似,也是圖的遍歷方法之一(樹的層次遍歷),是一種非常簡單直觀且歷史很悠久的遍歷方法,在搜索引擎爬蟲一出現就開始采用了。新提出的抓取策略往往會將這種方法作為比較基准,但應該注意到的是,這種策略也是一種相當強悍的方法,很多新方法實際效果不見昨比寬度優化遍歷策略好,所以至今這種方法也是很多實際爬蟲系統優先采用的爬取策略。

    對於上圖而言,廣度優先的順序是:A-->B-->F-->C-->D-->E-->G-->H。

    根據一些研究,一般有效的網頁深度不會超過10層(這里記不清了,實際應該遠小於10),也就是說樹高一般很小,但是每遞進一層,階段卻是幾何倍的增長。例如一個十分簡陋的新聞門戶網站,一般為:主頁(一個)-->欄目列表頁(十幾個)-->內容頁(幾千至幾十萬)。由此考慮兩種策略,很明顯廣度更優。而且采取廣度時我們可以很輕易的在合適的層次采用並行處理,如前邊可以在欄目列表頁將每個欄目分配給子線程(或子爬蟲程序),各自進行內容頁的抓取。

  (3)非完全pagerank策略

    首先可以了解下何為pagerank:pagerank算法是Google排名運算法則(排名公式)的一部分,是Google用於用來標識網頁的等級/重要性的一種方法,是Google用來衡量一個網站的好壞的唯一標准。

    既然pagerank能夠很好的對url評級,很自然地可以想到用PageRank的思想來對URL優化級進行排序。但是這里有個問題,PageRank是個全局性算法,也就是說當所有網頁下載完成后,其計算結果才是可靠的,而爬蟲的目的就是去下載網頁,在運行過程中只能看到一部分頁面,所以在爬取階段的網頁是無法獲得可靠的PageRank得分的。對於已經下載的網頁,加上待爬取的URL隊列中的一URL一起,形成網頁集合,在此集合內進行PageRank計算,計算完成之后,將待爬取URL隊列里的網頁按照按照PageRank得分由高低排序,形成的序列就是爬蟲接下來應該依次爬取的URL列表。這也是為何稱之為“非完全PageRank”的原因。

    參考:百科視頻講解(hadoop的,挺不錯,這集里邊簡單介紹了pagerank的實現)。

  (4)OPIC策略

    OPIC,即,字面含義是“在線頁面重要性計算”,可以將其看做是一種改進的PageRank算法。在算法開始之前,每個互聯網頁面都給予相同的“現金”(cash),每當下載了某個頁面P后,P將自己擁有的“現金”平均分配給頁面中包含的鏈接頁面,把自己的“現金”清空。而對於待抓取URL隊列中的網頁,則根據其手頭擁有的現金金額多少排序,優先下載現金最充裕的網頁。OCIP從大的框架上與PageRank思路基本一致,區別在於:PageRank每次需要迭代計算,而OCIP策略不需要迭代過程,所以計算速度遠遠快於PageRank,適合實時計算使用。同時,PageRank在計算時,存在向無鏈接關系網頁的遠程跳轉過程,而OCIP沒有這一計算因子。實驗結果表明,OCIP是種較好的重要性衡量策略,效果略優於寬度優先遍歷策略。

    這個只是摘抄,具體實現沒接觸過,而且感覺這樣的處理更適用於推薦系統。

    參考:這就是搜索引擎 核心技術詳解》

  (5)大站優先策略

    這個從字面就很容易理解,在爬去過程中會傾向於大網站的url,以網站為單位來選題網頁重要性,對於待爬取URL隊列中的網頁根據所屬網站歸類,如果哪個網站等待下載的頁面最多,則優化先下載這些鏈接,其本質思想傾向於優先下載大型網站。因為大型網站往往包含更多的頁面。鑒於大型網站往往是著名企業的內容,其網頁質量一般較高,所以這個思路雖然簡單,但是有一定依據。實驗表明這個算法效果也要略優先於寬度優先遍歷策略。

    個人感覺這種策略可以和其他策略結合使用,能夠達到更好的效果。

  (6)網頁更新策略

     互聯網的動態是其顯著特征,隨時都有新出現的頁面,頁面的內容被更改或者本來存在的頁面刪除。對於爬蟲來說,並非將網頁抓取到本地就算完成任務,也要體現出互聯網這種動態性。本地下載的網頁可被看做是互聯網頁的鏡像,爬蟲要盡可能保證其一致性。可以假設一種情況:某 個網頁已被刪除或者內容做出重大變動,而搜索引擎對此惘然無知,仍然按其舊有內容排序,將其作為搜索結果提供給用記,其用戶體驗度之糟糕不言而喻。所以對於已經爬取的網頁,爬蟲還要負責保持其內容和互聯網頁面內容的同步,這取決於爬蟲所彩用的網頁更新策略。網頁更新策略的任務是要決定何時重新爬取之前已經下載過和網頁,以盡可能使得本地下載網頁和互聯網原始頁面內容保持一致。常用的網頁更新策略有三種:歷史參考策略,用戶體驗度策略和聚類抽樣策略。

  說實話以上的多數策略對於一個高性能的通用爬蟲至關重要,但是對於菜鳥級的入門級爬蟲而言還很難很好的應用於實踐。所以下邊說幾點入門級爬蟲的爬取處理技巧:

  (1)限制域名,這對於多數垂直爬蟲都應該考慮的,對於廣告半邊天的的互聯網來說,如果你不想看到辛辛苦苦爬來的數據里邊出現一大堆廣告信息,這個處理是非常有效的。

  (2)加大列表頁面的優先級,這根沒啥好解釋的,多數時候要爬取的精華都在此。

  (3)可以根據抓取測試結果對url做適當過濾,比如網站的一些子欄目不需要,可以直接將對應url前綴加入黑名單,抓取時直接跳過。

  暫時寫這么多吧,感覺現在寫的越來越水了,可能快畢業了有些煩躁。好好整理下思路,下次的濾重處理爭取能寫好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM