網絡爬蟲學習

1.工作原理

網絡爬蟲是一個自動提取網頁的程序,它爲搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較爲複雜,需要根據一定的網頁分析算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。然後,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重覆上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。基本步驟:

1) 人工給定一個URL作爲入口,從這裏開始爬取。

2) 用運行隊列和完成隊列來保存不同狀態的鏈接。

3) 線程從運行隊列讀取隊首URL,如果存在,則繼續執行,反之則停止爬取。

4) 每處理完一個URL,將其放入完成隊列,防止重複訪問。

5) 每次抓取網頁之後分析其中的URLURL是字符串形式,功能類似指針),將經過過濾的合法鏈接寫入運行隊列,等待提取。

6) 重複步驟 3)、4)、5

2.關鍵技術

   1.對抓取目標的描述或定義

   2.對網頁或數據的分析與過濾

   3.URL的搜索策略

3.網頁搜索策略

1.廣度優先

廣度優先搜索策略是指在抓取過程中,在完成當前層次的搜索後,才進行下一層次的搜索。該算法的設計和實現相對簡單。在目前爲覆蓋儘可能多的網頁,一般使用廣度優先搜索方法。也有很多研究將廣度優先搜索策略應用於聚焦爬蟲中。其基本思想是認爲與初始URL在一定鏈接距離內的網頁具有主題相關性的概率很大。另外一種方法是將廣度優先搜索與網頁過濾技術結合使用,先用廣度優先策略抓取網頁,再將其中無關的網頁過濾掉。這些方法的缺點在於,隨着抓取網頁的增多,大量的無關網頁將被下載並過濾,算法的效率將變低。

2.深度優先

即從起始網頁開始,選擇一個URL,進入,分析這個網頁中的URL,選擇一個再進入。如此一個鏈接一個鏈接地深入追蹤下去,處理完一條路線之後再處理下一條路線。該算法在設置抓取深度時很容易導致爬蟲的陷入(trapped)問題,同時每深入一層,網頁價值和PageRank都會相應地有所下降。這暗示了重要網頁通常距離種子較近,而過度深入抓取到的網頁卻價值很低,所以目前常見的是廣度優先和最佳優先方法,很少使用深度優先策略。

3.最佳優先

   最佳優先搜索策略按照一定的網頁分析算法,預測候選URL與目標網頁的相似度,或與主題的相關性,並選取評價最好的一個或幾個URL進行抓取。它只訪問經過網頁分析算法預測爲“有用”的網頁。存在的一個問題是,在爬蟲抓取路徑上的很多相關網頁可能被忽略,因爲最佳優先策略是一種局部最優搜索算法。因此需要將最佳優先結合具體的應用進行改進,以跳出局部最優點。將在第4節中結合網頁分析算法作具體的討論。研究表明,這樣的閉環調整可以將無關網頁數量降低30%~90%

4.網頁分析算法

1.網絡拓撲

    基於網頁之間的鏈接,通過已知的網頁或數據,來對與其有直接或間接鏈接關係的對象(可以是網頁或網站等)作出評價的算法。又分爲網頁粒度、網站粒度和網頁塊粒度這三種。

    a)網頁粒度的分析算法                                 

  PageRankHITS算法是最常見的鏈接分析算法,兩者都是通過對網頁間鏈接度的遞歸和規範化計算,得到每個網頁的重要度評價。 PageRank算法雖然考慮了用戶訪問行爲的隨機性和Sink網頁的存在,但忽略了絕大多數用戶訪問時帶有目的性,即網頁和鏈接與查詢主題的相關性。針 對這個問題,HITS算法提出了兩個關鍵的概念:權威型網頁(authority)和中心型網頁(hub)。

  基於鏈接的抓取的問題是相關頁面主題團之間的隧道現象,即很多在抓取路徑上偏離主題的網頁也指向目標網頁,局部評價策略中斷了在當前路徑上的抓取行爲。部分文獻提出了一種基於反向鏈接(BackLink)的分層式上下文模型(Context Model),用於描述指向目標網頁一定物理跳數半徑內的網頁拓撲圖的中心Layer0爲目標網頁,將網頁依據指向目標網頁的物理跳數進行層次劃分,從外層網頁指向內層網頁的鏈接稱爲反向鏈接。

    b)網站粒度的分析算法

  網站粒度的資源發現和管理策略也比網頁粒度的更簡單有效。網站粒度的爬蟲抓取的關鍵之處在於站點的劃分和站點等級(SiteRank)的計算,SiteRank的計算方法與PageRank類似,但是需要對網站之間的鏈接作一定程度抽象,並在一定的模型下計算鏈接的權重。

  網站劃分情況分爲按域名劃分和按IP地址劃分兩種。一些文獻討論了在分佈式情況下,通過對同一個域名下不同主機、服務器的IP地址進行站 點劃分,構造站點圖,利用類似PageRank的方法評價SiteRank。同時,根據不同文件在各個站點上的分佈情況,構造文檔圖,結合 SiteRank分佈式計算得到DocRank。利用分佈式的SiteRank計算,不僅大大降低了單機站點的算法代價,而且克服了單獨站點對整個網絡覆蓋率有限的缺點。附帶的一個優點是,常見PageRank 造假難以對SiteRank進行欺騙。

    c)網頁塊粒度的分析算法

  在一個頁面中,往往含有多個指向其他頁面的鏈接,這些鏈接中只有一部分是指向主題相關網頁的,或根據網頁的鏈接錨文本表明其具有較高重要性。但是,在PageRankHITS算法中,沒有對這些鏈接作區分,因此常常給網頁分析帶來廣告等噪聲鏈接的干擾。在網頁塊級別(Block level) 進行鏈接分析的算法的基本思想是通過VIPS網頁分割算法將網頁分爲不同的網頁塊(page block),然後對這些網頁塊建立page to blockblock to page的鏈接矩陣, 分別記爲ZX。於是,在 page to page圖上的網頁塊級別的PageRank W(p)=X×Z; 在block to block圖上的BlockRank W(b)=Z×X。 已經有人實現了塊級別的PageRankHITS算法,並通過實驗證明,效率和準確率都比傳統的對應算法要好

2.網頁內容

   1、針對以文本和超鏈接爲主的無結構或結構很簡單的網頁。

隨着如今網頁內容的多樣化,該方法已不再單獨使用。

   2、針對從結構化的數據源(RDBMS)動態生成的頁面,其數據不能直接批量訪問。

    3、介於12之間的,具有較好結構,遵循一定模式或風格,可直接訪問的網頁。

    在提取html文檔的文本信息時要過濾標識符,但同時還要注意依照標識符來取得版式信息(如標題、粗體、關鍵字等),另外還要過濾無用鏈接(如廣告鏈接)。

    錨文本可以作爲所在頁面內容的評估和所指向的頁面內容的評估,還可以收集一些搜索引擎不能索引的文件(例如圖片)。

    多媒體,圖片等文件一般通過錨文本和相關文件註釋來判斷文件內容。

    對於docpdf等有專業廠商提供的軟件生成的文檔,廠商會會爲爬蟲提供相應的文本提取接口的插件

3.用戶訪問

   

5.網絡爬蟲實例

Heritrix

Heritrix是一個爬蟲框架,可以加入一些可互換的組件。Heritrix是用來獲取完整精確的網站內容的爬蟲,除文本內容之外,它還獲取其他非文本內容(如圖片等)並對其進行處理,且不對網頁內容進行修改。當重複爬行相同URL時,不會對先前網頁進行替換。

Nutch

Nutch深度遍歷網站資源,將這些資源抓取到本地,使用的方法都是分析網站每一個有效的URL並向服務器端提交請求來獲得相應結果,生成本地文件及相應的日誌信息等。

Larbin

Larbin不同於以上兩種網絡爬蟲,它只抓取網頁,而不提供包括分析網頁、將結果存儲到數據庫以及建立索引等服務。

Larbin的目的是對頁面上的URL進行擴展性的抓取,爲搜索引擎提供廣泛的數據來源。雖然工作能力較爲單一,但Larbin勝在其高度可配置性和良好的工作效率(一個簡單的larbin的爬蟲可以每天獲取500萬的網頁),這也是Larbin最初的設計理念。

Lucene

Lucene 是一個基於Java的全文信息檢索工具包,它本身不是一個完整的全文索引應用程序,而是爲各種應用程序提供索引和搜索功能。只要能把要索引的數據轉化的文本格式,Lucene 就能對該文檔進行索引和搜索。

Lucene採用的是一種稱爲反向索引(inverted index)的方法。因此,在用戶輸入查詢條件的時候,Lucebne能非常快地得到搜索結果。

對文檔建立好索引後,搜索引擎首先會對關鍵詞進行解析,然後在建立好的索引上面進行查找並返回和用戶輸入的關鍵詞相關聯的文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章