1. 程式人生 > >爬蟲的一些知識點 目錄 1. 網路爬蟲 1 2. 產生背景 垂直領域搜尋引擎 2 3. 1 聚焦爬蟲工作原理以及關鍵技術概述 3 4. 涉及技術 3 4.1. 下載網頁 一般是通過net api

爬蟲的一些知識點 目錄 1. 網路爬蟲 1 2. 產生背景 垂直領域搜尋引擎 2 3. 1 聚焦爬蟲工作原理以及關鍵技術概述 3 4. 涉及技術 3 4.1. 下載網頁 一般是通過net api

爬蟲的一些知識點

 

目錄

1. 網路爬蟲 1

2. 產生背景 垂直領域搜尋引擎 2

3. 1 聚焦爬蟲工作原理以及關鍵技術概述 3

4. 涉及技術 3

4.1. 下載網頁  一般是通過net api 3

4.2. 分析網頁(html分析,介面可能有json 3

5. 分類 3

5.1. 通用網路爬蟲(General Purpose Web Crawler)、聚焦網路爬蟲(Focused Web Crawler)、增量式網路爬蟲(Incremental Web Crawler)、深層網路爬蟲(Deep Web Crawler)。 4

5.2. 聚焦網路爬蟲 4

5.3. Deep Web 爬蟲 4

6. 網頁分析演算法 5

6.1. 網頁分析演算法可以歸納為基於網路拓撲、基於網頁內容和基於使用者訪問行為三種類型。 5

7. 言歸正傳,java實現網路爬蟲一般有五種方法 7

7.1. 2.基於HttpURLConnection類編寫爬蟲:java se的net包的核心類,主要用於http的相關操作。簡單 7

7.2. 3.基於apache的HttpClient包編寫爬蟲:由net包拓展而來,專為java網路通訊程式設計而服務。常用 7

7.3. 5.基於Selenium或者是WebDriver之類的有頭(有介面)瀏覽器。。適合於複雜介面 8

8. 核心程式碼範例 8

8.1. 下載網頁 8

 

 

  1. 網路爬蟲

(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者腳

 

爬蟲目的::為了獲取資料,就是通過url介面  web gui介面來獲取資料

操作web自動化(自動化註冊,批量註冊機,發帖機,點贊器)

自動化測試

  1. 產生背景 垂直領域搜尋引擎

編輯

隨著網路的迅速發展,全球資訊網成為大量資訊的載體,如何有效地提取並利用這些資訊成為一個巨大的挑戰。

搜尋引擎(Search Engine),例如傳統的通用搜索引擎AltaVista,Yahoo!和Google等,作為一個輔助人們檢索資訊的工具成為使用者訪問全球資訊網的入口和指南。但是,這些通用性搜尋引擎也存在著一定的侷限性,如:

(1)不同領域、不同背景的使用者往往具有不同的檢索目的和需求,通用搜索引擎所返回的結果包含大量使用者不關心的網頁。

(2)通用搜索引擎的目標是儘可能大的網路覆蓋率,有限的搜尋引擎伺服器資源與無限的網路資料資源之間的矛盾將進一步加深。

(3)全球資訊網資料形式的豐富和網路技術的不斷髮展,圖片、資料庫、音訊、視訊多媒體等不同資料大量出現,通用搜索引擎往往對這些資訊含量密集且具有一定結構的資料無能為力,不能很好地發現和獲取。

(4)通用搜索引擎大多提供基於關鍵字的檢索,難以支援根據語義資訊提出的查詢。

網路爬蟲

為了解決上述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載網頁的程式,它根據既定的抓取目標,有選擇的訪問全球資訊網上的網頁與相關的連結,獲取所需要的資訊。與通用爬蟲(general purpose web crawler)不同,聚焦爬蟲並不追求大的覆蓋,而將目標定為抓取與某一特定主題內容相關的網頁,為面向主題的使用者查詢準備資料資源。

 

 

 

 

  1. 1 聚焦爬蟲工作原理以及關鍵技術概述

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

相對於通用網路爬蟲,聚焦爬蟲還需要解決三個主要問題:

(1) 對抓取目標的描述或定義;

(2) 對網頁或資料的分析與過濾;

(3) 對URL的搜尋策略

 

  1. 涉及技術
    1. 下載網頁  一般是通過net api
    2. 分析網頁(html分析,介面可能有json
  2. 分類

編輯

網路爬蟲按照系統結構和實現技術,大致可以分為以下幾種型別:

    1. 通用網路爬蟲(General Purpose Web Crawler)、聚焦網路爬蟲(Focused Web Crawler)、增量式網路爬蟲(Incremental Web Crawler)、深層網路爬蟲(Deep Web Crawler)。 

實際的網路爬蟲系統通常是幾種爬蟲技術相結合實現的 [1]  

    1. 聚焦網路爬蟲

聚焦網路爬蟲(Focused Crawler),又稱主題網路爬蟲(Topical Crawler),是指選擇性地爬行那些與預先定義好的主題相關頁面的網路爬蟲[8]。 和通用網路爬蟲相比,聚焦爬蟲只需要爬行與主題相關的頁面,極大地節省了硬體和網路資源,儲存的頁面也由於數量少而更新快,還可以很好地滿足一些特定人群對特定領域資訊的需求 [1]  。

聚焦網路爬蟲和通用網路爬蟲相比,增加了連結評價模組以及內容評價模組。聚焦爬蟲爬行策略實現的關鍵是評價頁面內容和連結的重要性,不同的方法計算出的重要性不同,由此導致連結的訪問順序也不同 [1]  。

    1. Deep Web 爬蟲

Web 頁面按存在方式可以分為表層網頁(Surface Web)和深層網頁(Deep Web,也稱 Invisible Web Pages 或 Hidden Web)。 表層網頁是指傳統搜尋引擎可以索引的頁面,以超連結可以到達的靜態網頁為主構成的 Web 頁面。Deep Web 是那些大部分內容不能通過靜態連結獲取的、隱藏在搜尋表單後的,只有使用者提交一些關鍵詞才能獲得的 Web 頁面。例如那些使用者註冊後內容才可見的網頁就屬於 Deep Web。 2000 年 Bright Planet 指出:Deep Web 中可訪問資訊容量是 Surface Web 的幾百倍,是網際網路上最大、發展最快的新型資訊資源 [1]  。

Deep Web 爬蟲體系結構包含六個基本功能模組 (爬行控制器、解析器、表單分析器、表單處理器、響應分析器、LVS 控制器)和兩個爬蟲內部資料結構(URL 列表、LVS 表)。 其中 LVS(Label Value Set)表示標籤/數值集合,用來表示填充表單的資料來源 [1]  。

Deep Web 爬蟲爬行過程中最重要部分就是表單填寫,包含兩種型別:

1) 基於領域知識的表單填寫:此方法一般會維持一個本體庫,通過語義分析來選取合適的關鍵詞填寫表單。 Yiyao Lu[25]等人提出一種獲取 Form 表單資訊的多註解方法,將資料表單按語義分配到各個組中 ,對每組從多方面註解,結合各種註解結果來預測一個最終的註解標籤;鄭鼕鼕等人利用一個預定義的領域本體知識庫來識別 Deep Web 頁面內容, 同時利用一些來自 Web 站點導航模式來識別自動填寫表單時所需進行的路徑導航 [1]  。

2) 基於網頁結構分析的表單填寫: 此方法一般無領域知識或僅有有限的領域知識,將網頁表單表示成 DOM 樹,從中提取表單各欄位值。 Desouky 等人提出一種 LEHW 方法,該方法將 HTML 網頁表示為DOM 樹形式,將表單區分為單屬性表單和多屬性表單,分別進行處理;孫彬等人提出一種基於 XQuery 的搜尋系統,它能夠模擬表單和特殊頁面標記切換,把網頁關鍵字切換資訊描述為三元組單元,按照一定規則排除無效表單,將 Web 文件構造成 DOM 樹,利用 XQuery 將文字屬性對映到表單欄位[1]  。

Raghavan 等人提出的 HIWE 系統中,爬行管理器負責管理整個爬行過程,分析下載的頁面,將包含表單的頁面提交表單處理器處理,表單處理器先從頁面中提取表單,從預先準備好的資料集中選擇資料自動填充並提交表單,由爬行控制器下載相應的結果頁面 [1]  。

  1. 網頁分析演算法

編輯

    1. 網頁分析演算法可以歸納為基於網路拓撲、基於網頁內容和基於使用者訪問行為三種類型。

 

拓撲分析演算法

基於網頁之間的連結,通過已知的網頁或資料,來對與其有直接或間接連結關係的物件(可以是網頁或網站等)作出評價的演算法。又分為網頁粒度、網站粒度和網頁塊粒度這三種。

1 網頁(Webpage)粒度的分析演算法

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

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

2 網站粒度的分析演算法

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

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

3 網頁塊粒度的分析演算法

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

網頁內容分析演算法

基於網頁內容的分析演算法指的是利用網頁內容(文字、資料等資源)特徵進行的網頁評價。網頁的內容從原來的以超文字為主,發展到後來動態頁面(或稱為Hidden Web)資料為主,後者的資料量約為直接可見頁面資料(PIW,Publicly Indexable Web)的400~500倍。另一方面,多媒體資料、Web Service等各種網路資源形式也日益豐富。因此,基於網頁內容的分析演算法也從原來的較為單純的文字檢索方法,發展為涵蓋網頁資料抽取、機器學習、資料探勘、語義理解等多種方法的綜合應用。本節根據網頁資料形式的不同,將基於網頁內容的分析演算法,歸納以下三類:第一種針對以文字和超連結為主的無結構或結構很簡單的網頁;第二種針對從結構化的資料來源(如RDBMS)動態生成的頁面,其資料不能直接批量訪問;第三種針對的資料界於第一和第二類資料之間,具有較好的結構,顯示遵循一定模式或風格,且可以直接訪問。

基於文字的網頁分析演算法

1) 純文字分類與聚類演算法

很大程度上借用了文字檢索的技術。文字分析演算法可以快速有效的對網頁進行分類和聚類,但是由於忽略了網頁間和網頁內部的結構資訊,很少單獨使用。

2) 超文字分類和聚類演算法

根據網頁連結網頁的相關型別對網頁進行分類,依靠相關聯的網頁推測該網頁的型別。

 

  1. 言歸正傳,java實現網路爬蟲一般有五種方法

(據我所知,要是有其他方法的同學歡迎分享)

 

1.基於socket通訊編寫爬蟲:最底層的方式,同時也是執行最高效的,不過開發效率最低。

 

    1. 2.基於HttpURLConnection類編寫爬蟲:java se的net包的核心類,主要用於http的相關操作。簡單

 

    1. 3.基於apache的HttpClient包編寫爬蟲:由net包拓展而來,專為java網路通訊程式設計而服務。常用

 

4.基於phantomjs之類的無頭(無介面)瀏覽器:

 

    (1)它是瀏覽器的核心,並非瀏覽器。換言之,它是沒有UI的瀏覽器。

 

    (2)它提供的js api,故它可以方便直接的被各種程式語言呼叫。換言之,似乎是js寫的。

 

    1. 5.基於Selenium或者是WebDriver之類的有頭(有介面)瀏覽器。。適合於複雜介面
  1. 核心程式碼範例
    1. 下載網頁

import org.apache.commons.io.IOUtils;

//爬蟲核心 下載url網頁使用jdk net api

public class demo {

 

public static void main(String[] args) throws IOException {

    String urlInfo="http://www.baidu.com";

//讀取目的網頁URL地址,獲取網頁原始碼

        URL url = new URL(urlInfo);

        //開啟http 網路連線

        HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection();

        //獲取input流

        InputStream is = httpUrl.getInputStream();

        //儲存http的輸出流到檔案,持久化

     IOUtils.copy(is, new FileOutputStream(new File("d:\\baidu.html")));

 

}