通過網路爬蟲採集大資料

2021-09-24 18:05:09 字數 4297 閱讀 8787

在網際網路時代,網路爬蟲主要是為搜尋引擎提供最全面和最新的資料。

在大資料時代,網路爬蟲更是從網際網路上採集資料的有利工具。目前已經知道的各種網路爬蟲工具已經有上百個,網路爬蟲工具基本可以分為 3 類。

本節首先對網路爬蟲的原理和工作流程進行簡單介紹,然後對網路爬蟲抓取策略進行討論,最後對典型的網路工具進行描述。

網路爬蟲是一種按照一定的規則,自動地抓取 web 資訊的程式或者指令碼。

web 網路爬蟲可以自動採集所有其能夠訪問到的頁面內容,為搜尋引擎和大資料分析提供資料**。從功能上來講,爬蟲一般有資料採集、處理和儲存 3 部分功能,如圖 1 所示。

圖 1  網路爬蟲示意

網路爬蟲系統正是通過網頁中的超連結資訊不斷獲得網路上的其他網頁的。網路爬蟲從乙個或若干初始網頁的 url 開始,獲得初始網頁上的 url,在抓取網頁的過程中,不斷從當前頁面上抽取新的 url 放入佇列,直到滿足系統的一定停止條件。

網路爬蟲系統以這些種子集合作為初始 url,開始資料的抓取。因為網頁中含有鏈結資訊,通過已有網頁的 url 會得到一些新的 url。

可以把網頁之間的指向結構視為乙個森林,每個種子 url 對應的網頁是森林中的一棵樹的根結點,這樣網路爬蟲系統就可以根據廣度優先搜尋演算法或者深度優先搜尋演算法遍歷所有的網頁。

由於深度優先搜尋演算法可能會使爬蟲系統陷入乙個**內部,不利於搜尋比較靠近**首頁的網頁資訊,因此一般採用廣度優先搜尋演算法採集網頁。

其次,根據一定的網頁分析演算法過濾掉與主題無關的鏈結,保留有用的鏈結並將其放入等待抓取的 url 佇列。

如圖 2 所示,網路爬蟲的基本工作流程如下。

1)首先選取一部分種子 url。

2)將這些 url 放入待抓取 url 佇列。

4)分析已抓取 url 佇列中的 url,分析其中的其他 url,並且將這些 url 放入待抓取 url 佇列,從而進入下乙個迴圈。

圖 2  網路爬蟲的基本工作流程

本節首先對網路爬蟲抓取策略用到的基本概念做簡單介紹。

1)網頁間關係模型

從網際網路的結構來看,網頁之間通過數量不等的超連結相互連線,形成乙個彼此關聯、龐大複雜的有向圖。

如圖 3 所示,如果將網頁看成是圖中的某乙個結點,而將網頁中指向其他網頁的鏈結看成是這個結點指向其他結點的邊,那麼我們很容易將整個網際網路上的網頁建模成乙個有向圖。

理論上講,通過遍歷演算法遍歷該圖,可以訪問到網際網路上幾乎所有的網頁。

圖 3  網頁關係模型圖

2)網頁分類

圖 4  網頁分類

可知網頁是指還沒有抓取下來,也沒有在待抓取 url 佇列中,但是可以通過對已抓取頁面或者待抓取 url 對應頁面進行分析,從而獲取到的網頁。

下面重點介紹幾種常見的抓取策略。

1.  通用網路爬蟲

通用網路爬蟲又稱全網爬蟲,爬行物件從一些種子 url 擴充套件到整個 web,主要為門戶站點搜尋引擎和大型 web 服務提供商採集資料。

為提高工作效率,通用網路爬蟲會採取一定的爬行策略。常用的爬行策略有深度優先策略和廣度優先策略。

1)深度優先策略

深度優先策略是指網路爬蟲會從起始頁開始,乙個鏈結乙個鏈結地跟蹤下去,直到不能再深入為止。

網路爬蟲在完成乙個爬行分支後返回到上一鏈結結點進一步搜尋其他鏈結。當所有鏈結遍歷完後,爬行任務結束。

這種策略比較適合垂直搜尋或站內搜尋,但爬行頁面內容層次較深的站點時會造成資源的巨大浪費。

以圖 3 為例,遍歷的路徑為 1→2→5→6→3→7→4→8。

在深度優先策略中,當搜尋到某乙個結點的時候,這個結點的子結點及該子結點的後繼結點全部優先於該結點的兄弟結點,深度優先策略在搜尋空間的時候會盡量地往深處去,只有找不到某結點的後繼結點時才考慮它的兄弟結點。

這樣的策略就決定了深度優先策略不一定能找到最優解,並且由於深度的限制甚至找不到解。

如果不加限制,就會沿著一條路徑無限制地擴充套件下去,這樣就會「陷入」到巨大的資料量中。一般情況下,使用深度優先策略都會選擇乙個合適的深度,然後反覆地搜尋,直到找到解,這樣搜尋的效率就降低了。所以深度優先策略一般在搜尋資料量比較小的時候才使用。

2)廣度優先策略

廣度優先策略按照網頁內容目錄層次深淺來爬行頁面,處於較淺目錄層次的頁面首先被爬行。當同一層次中的頁面爬行完畢後,爬蟲再深入下一層繼續爬行。

仍然以圖 3 為例,遍歷的路徑為 1→2→3→4→5→6→7→8

由於廣度優先策略是對第 n 層的結點擴充套件完成後才進入第 n+1 層的,所以可以保證以最短路徑找到解。

這種策略能夠有效控制頁面的爬行深度,避免遇到乙個無窮深層分支時無法結束爬行的問題,實現方便,無須儲存大量中間結點,不足之處在於需較長時間才能爬行到目錄層次較深的頁面。

如果搜尋時分支過多,也就是結點的後繼結點太多,就會使演算法耗盡資源,在可以利用的空間內找不到解。

2.  聚焦網路爬蟲

聚焦網路爬蟲又稱主題網路爬蟲,是指選擇性地爬行那些與預先定義好的主題相關的頁面的網路爬蟲。

1)基於內容評價的爬行策略

debra 將文字相似度的計算方法引入到網路爬蟲中,提出了 fish search 演算法。

該演算法將使用者輸入的查詢詞作為主題,包含查詢詞的頁面被視為與主題相關的頁面,其侷限性在於無法評價頁面與主題相關度的大小。

herseovic 對 fish search 演算法進行了改進,提出了 shark search 演算法,即利用空間向量模型計算頁面與主題的相關度大小。

2)基於鏈結結構評價的爬行策略

網頁不同於一般文字,它是一種半結構化的文件,包含了許多結構化的資訊。

網頁不是單獨存在的,頁面中的鏈結指示了頁面之間的相互關係,基於鏈結結構的搜尋策略模式利用這些結構特徵來評價頁面和鏈結的重要性,以此決定搜尋的順序。其中,pagerank 演算法是這類搜尋策略模式的代表。

pagerank 演算法的基本原理是,如果乙個網頁多次被引用,則可能是很重要的網頁,如果乙個網頁沒有被多次引用,但是被重要的網頁引用,也有可能是重要的網頁。乙個網頁的重要性被平均地傳遞到它所引用的網頁上。

將某個頁面的 pagerank 除以存在於這個頁面的正向鏈結,並將得到的值分別和正向鏈結所指的頁面的 pagerank 相加,即得到了被鏈結的頁面的 pagerank。

如圖 5 所示,pagerank 值為 100 的網頁把它的重要性平均傳遞給了它所引用的兩個頁面,每個頁面獲得了 50,同樣 pagerank 值為 9 的網頁給它所引用的 3 個頁面的每個頁面傳遞的值為 3。

pagerank 值為 53 的頁面的值**於兩個引用了它的頁面傳遞過來的值。

圖 5  pagerank 演算法示例

3)基於增強學習的爬行策略

rennie 和 mccallum 將增強學習引入聚焦爬蟲,利用貝葉斯分類器,根據整個網頁文字和鏈結文字對超連結進行分類,為每個鏈結計算出重要性,從而決定鏈結的訪問順序。

4)基於語境圖的爬行策略

diligenti 等人提出了一種通過建立語境圖學習網頁之間的相關度的爬行策略,該策略可訓練乙個機器學習系統,通過該系統可計算當前頁面到相關 web 頁面的距離,距離近的頁面中的鏈結優先訪問。

3. 增量式網路爬蟲

增量式網路爬蟲有兩個目標:

為實現第乙個目標,增量式網路爬蟲需要通過重新訪問網頁來更新本地頁面集中頁面的內容。常用的方法有統一更新法、個體更新法和基於分類的更新法。

為實現第二個目標,增量式網路爬蟲需要對網頁的重要性排序,常用的策略有廣度優先策略、pagerank 優先策略等。

4. 深層網路爬蟲

網頁按存在方式可以分為表層網頁和深層網頁。

深層網路爬蟲體系結構包含 6 個基本功能模組(爬行控制器、解析器、表單分析器、表單處理器、響應分析器、lvs 控制器)和兩個爬蟲內部資料結構(url 列表和 lvs 表)。

其中,lvs(labelvalueset)表示標籤和數值集合,用來表示填充表單的資料來源。在爬取過程中,最重要的部分就是表單填寫,包含基於領域知識的表單填寫和基於網頁結構分析的表單填寫兩種。

**:

python網路爬蟲 通過網際網路採集

在你寫爬蟲隨意跟隨外鏈跳轉之前,請問自己幾個問題 1 我們要收集哪些資料?這些資料可以通過採集幾個已經確定的 永遠是最簡單的做法 完成嗎?或者我的爬蟲需要發現那些我可能不知道的 3 如果我的網路爬蟲引起了某個 網管的懷疑,我如何避免法律責任?幾個靈活的python函式組合起來就可以實現不同型別的網路...

初始大資料 02 日誌採集大資料和爬蟲採集大資料

此圖借鑑 關鍵字 從整體上描述 agent 中 sources sinks channels 所涉及的元件 詳細指定agent中每個sources,sinks 和channels的具體實現 通過 channel 將 source 與 sink 連線起來。啟動 agent 的 shell 操作 網路爬...

python 爬蟲 網路資料採集 入門知識

1 正規表示式符號與方法 常用符號 匹配任意字元,換行符 除外 匹配前乙個字元0次或無限次 匹配前乙個字元0次或1次 貪心演算法 非貪心演算法 括號內的資料作為結果返回 2 正規表示式符號與方法 常用方法 findall 匹配所有符合規律的內容,返回包含結果的列表 search 匹配並提取第乙個符合...