網絡數據采集是指通過網絡爬蟲或網站公開 API 等方式從網站上獲取數據信息。該方法可以將非結構化數據從網頁中抽取出來,將其存儲為統一的本地數據文件,并以結構化的方式存儲。它支持圖片、音頻、視頻等文件或附件的采集,附件與正文可以自動關聯。
在互聯網時代,網絡爬蟲主要是為搜索引擎提供最全面和最新的數據。
在大數據時代,網絡爬蟲更是從互聯網上采集數據的有利工具。目前已經知道的各種網絡爬蟲工具已經有上百個,網絡爬蟲工具基本可以分為 3 類。
分布式網絡爬蟲工具,如 Nutch。
java 網絡爬蟲工具,如 Crawler4j、WebMagic、WebCollector。
非 Java 網絡爬蟲工具,如 Scrapy(基于python?語言開發)。
本節首先對網絡爬蟲的原理和工作流程進行簡單介紹,然后對網絡爬蟲抓取策略進行討論,最后對典型的網絡工具進行描述。
網絡爬蟲原理
網絡爬蟲是一種按照一定的規則,自動地抓取 Web 信息的程序或者腳本。
Web 網絡爬蟲可以自動采集所有其能夠訪問到的頁面內容,為搜索引擎和大數據分析提供數據來源。從功能上來講,爬蟲一般有數據采集、處理和存儲 3 部分功能,如圖 1 所示。
圖 1? 網絡爬蟲示意
網頁中除了包含供用戶閱讀的文字信息外,還包含一些超鏈接信息。
很多初學者,對大數據的概念都是模糊不清的,大數據是什么,能做什么,學的時候,該按照什么線路去學習,學完往哪方面發展,想深入了解,想學習的同學歡迎加入大數據學習企鵝群:458345782,有大量干貨(零基礎以及進階的經典實戰)分享給大家,并且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系
網絡爬蟲系統正是通過網頁中的超鏈接信息不斷獲得網絡上的其他網頁的。網絡爬蟲從一個或若干初始網頁的 URL 開始,獲得初始網頁上的 URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的 URL 放入隊列,直到滿足系統的一定停止條件。
網絡爬蟲系統一般會選擇一些比較重要的、出度(網頁中鏈出的超鏈接數)較大的網站的 URL 作為種子 URL 集合。
網絡爬蟲系統以這些種子集合作為初始 URL,開始數據的抓取。因為網頁中含有鏈接信息,通過已有網頁的 URL 會得到一些新的 URL。
可以把網頁之間的指向結構視為一個森林,每個種子 URL 對應的網頁是森林中的一棵樹的根結點,這樣網絡爬蟲系統就可以根據廣度優先搜索算法或者深度優先搜索算法遍歷所有的網頁。
由于深度優先搜索算法可能會使爬蟲系統陷入一個網站內部,不利于搜索比較靠近網站首頁的網頁信息,因此一般采用廣度優先搜索算法采集網頁。
網絡爬蟲系統首先將種子 URL 放入下載隊列,并簡單地從隊首取出一個 URL 下載其對應的網頁,得到網頁的內容并將其存儲后,經過解析網頁中的鏈接信息可以得到一些新的 URL。
其次,根據一定的網頁分析算法過濾掉與主題無關的鏈接,保留有用的鏈接并將其放入等待抓取的 URL 隊列。
最后,取出一個 URL,對其對應的網頁進行下載,然后再解析,如此反復進行,直到遍歷了整個網絡或者滿足某種條件后才會停止下來。
網絡爬蟲工作流程
如圖 2 所示,網絡爬蟲的基本工作流程如下。
1)首先選取一部分種子 URL。
2)將這些 URL 放入待抓取 URL 隊列。
3)從待抓取 URL 隊列中取出待抓取 URL,解析 DNS,得到主機的 IP 地址,并將 URL 對應的網頁下載下來,存儲到已下載網頁庫中。此外,將這些 URL 放進已抓取 URL 隊列。
4)分析已抓取 URL 隊列中的 URL,分析其中的其他 URL,并且將這些 URL 放入待抓取 URL 隊列,從而進入下一個循環。
圖 2??網絡爬蟲的基本工作流程
網絡爬蟲抓取策略
Google 和百度等通用搜索引擎抓取的網頁數量通常都是以億為單位計算的。那么,面對如此眾多的網頁,通過何種方式才能使網絡爬蟲盡可能地遍歷所有網頁,從而盡可能地擴大網頁信息的抓取覆蓋面,這是網絡爬蟲系統面對的一個很關鍵的問題。在網絡爬蟲系統中,抓取策略決定了抓取網頁的順序。
本節首先對網絡爬蟲抓取策略用到的基本概念做簡單介紹。
1)網頁間關系模型
從互聯網的結構來看,網頁之間通過數量不等的超鏈接相互連接,形成一個彼此關聯、龐大復雜的有向圖。
如圖 3 所示,如果將網頁看成是圖中的某一個結點,而將網頁中指向其他網頁的鏈接看成是這個結點指向其他結點的邊,那么我們很容易將整個互聯網上的網頁建模成一個有向圖。
理論上講,通過遍歷算法遍歷該圖,可以訪問到互聯網上幾乎所有的網頁。
圖 3??網頁關系模型圖
2)網頁分類
從爬蟲的角度對互聯網進行劃分,可以將互聯網的所有頁面分為 5 個部分:已下載未過期網頁、已下載已過期網頁、待下載網頁、可知網頁和不可知網頁,如圖 4 所示。
抓取到本地的網頁實際上是互聯網內容的一個鏡像與備份。互聯網是動態變化的,當一部分互聯網上的內容發生變化后,抓取到本地的網頁就過期了。所以,已下載的網頁分為已下載未過期網頁和已下載已過期網頁兩類。
圖 4? 網頁分類
待下載網頁是指待抓取 URL 隊列中的那些頁面。
可知網頁是指還沒有抓取下來,也沒有在待抓取 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)表示標簽和數值集合,用來表示填充表單的數據源。在爬取過程中,最重要的部分就是表單填寫,包含基于領域知識的表單填寫和基于網頁結構分析的表單填寫兩種。