黃宇
(湖北工業大學圖書館,湖北 武漢430068)
網絡爬蟲又稱為網絡蜘蛛, 是按一定規則自動抓取互聯網上信息的程序,它為搜索引擎的服務提供數據基礎,它的性能直接決定著搜索引擎的好壞[1]。目前, 不光搜索引擎會用網絡爬蟲, 很多前沿研究領域都需要網絡爬蟲技術的支撐。大數據分析所需要的海量數據需要通過網絡爬蟲獲取。金融領域研究所需的大量精準且實時的金融數據也需要通過爬蟲獲取。商戶通過抓取競爭對手發布的商品信息調整自己的營銷策略[2],網絡爬蟲的應用已經滲透到了各行各業。
網絡爬蟲是搜索引擎的重要組成部分, 其作用是根據既定的抓取策略為搜索引擎從互聯網上抓取數據, 為用戶檢索提供數據基礎。主題網絡爬蟲在抓取數據時比普通網絡爬蟲多了兩道處理步驟,分別是頁面相關度評價與超鏈接相關度評估示。網頁抓取模塊從初始種子鏈接列表中的頁面開始抓取數據, 網頁分析模塊對抓取的數據分析后, 由頁面相關度評價模塊計算該數據是否與領域主題相關,若相關則將所抓取數據過濾后存入網頁庫中,若無關則丟棄。與此同時從所抓取數據中提取超鏈接,并對其進行相關度評價,若有符合要求則將其按照相關度的高低排序后存入URL 庫中,等待下一次遍歷。
網絡爬蟲在網絡中抓取到相關頁面后, 首先提取該網頁的URL, 接著對去重后的URL繼續爬取。但隨著網頁數量的劇烈增長,噪聲鏈接也會隨之增多,若不進行去噪,爬蟲將會耗費大量資源在噪聲鏈接上。目標鏈接提取的主要任務有兩個,一個去除重復鏈接,另一剔除與內容無關的鏈接,即噪聲鏈接。
2.2.1 待爬鏈接去重
在網絡爬蟲爬取資源的過程中, 會記錄下所有已爬過頁面的URL,當有新的URL 時就會和這個集合比較,看看是否存在。在這個集合很大的時候,存儲這些URL 會耗費很大的存儲空間,而且比對時遍歷過去,需要相當多的時間和資源。針對這個問題,可以采用布隆過濾器來解決。布隆過濾器是1970 年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數,可以用于檢索一個元素是否在一個集合中。它的優點是占用的內存很少,查詢速度夠快,比一般的算法要好的多,缺點是存在一定的誤判率和刪除困難[3]。
2.2.2 相關鏈接提取
隨著媒體技術的不斷發展, 網頁上可承載的內容類型也越來越多,比如說與內容無關的聲音、視頻等。若不采用有效的方法對這部分內容即網頁噪聲進行處理, 網絡爬蟲將會對網頁中所有的噪聲鏈接進行爬取,這將極大地浪費系統資。為解決這一問題,需要網絡爬蟲能夠識別網頁中的噪聲鏈接。目前常用的方法有如下幾種:基于統計學的相關鏈接提取方法、基于DOM樹的相關鏈接提取方法、基于機器學習的相關鏈接提取方法、基于視覺的噪聲鏈接去除方法等。
2.3.1 頁面緩存
頁面緩存是將動態頁面直接生成靜態的頁面放在服務器端,用戶調取相同頁面時,靜態頁面將直接下載到客戶端,不再需要通過程序的運行和數據庫的訪問,大大降低了服務器的負載[4]。網絡爬蟲在工作過程中, 需要根據服務器傳輸的數據量來動態申請堆內存保存網頁數據,以便用于后續網頁的分析。常用的內存管理模型有ptmalloc、tcmalloc、內存池等。
2.3.2 DNS 緩存
DNS 是Domain Name System的縮寫,即域名系統。互聯網中的主機都被賦予了統一標識IP 地址, 但IP 地址是一個32 位二進制數字,不具備良好的可讀性。DNS 將域名和IP 地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP 數串[5]。由于有了DNS 緩存,網絡爬蟲不用每次訪問頁面前都進行域名解析,這極大地提高了工作效率,減少解析時間。
分布式是相對集中式而言。集中式系統是由一臺或多臺主計算機組成的中心節點,數據集中存儲于這個中心節點[6],連接它的終端僅用來輸入和輸出。分布式系統則是依托網絡建立的一套系統。它是通過網絡將多個類似集中式系統聯系組織起來,合作完成數據處理。分布式系統擁有多種通用的物理和邏輯資源,能夠動態的分配任務,分散的物理和邏輯資源通過計算機網絡實現信息交換。目前常用的分布式系統根據各節點通信的方式不同,分為主從式、自治式和混合式[7]。主從式架構的工作原理是在集群中選取一臺主機作為控制節點,負責對集群中其他主機進行管理,其他各主機是相互獨立的,彼此進行通信必須經過主機控制節點。自治式架構則是集群中的主機沒有主次之分,每臺主機既要對完成數據的處理工作,也要完成與其他各節點進行通信的功能。混合式架構中的節點分為控制節點與數據處理節點,控制節點主要是存儲數據處理節點的狀態并進行作業分配,數據處理節點則是進行數據處理與相互通信。
本系統的架構采用的是混合式架構,控制節點的任務主要是存儲數據處理節點的狀態,進行各數據處理節點的作業分配,并對無法分配的作業進行集中處理。
系統采用的是最小負載調度算法,每次進行任務分配時總是選取當前負載最小的節點作為任務執行節點,集群中所有數據處理節點的負載情況都記錄在控制節點的負載狀態表中。這種算法實現起來簡單高效開銷小,因此被許多分布式系統中調度器所采用。
分布式主題網絡爬蟲系統主要由六個功能模塊組成,分別是采集模塊、數據緩存模塊、分析模塊、提取模塊、存儲模塊以及日志模塊。采集模塊的任務是主題網絡爬蟲依據設定好的策略在互連網上抓取符合特定條件的頁面,并從已下載的頁面中提取與主題相關度高的鏈接地址加入到待抓取序列中。數據緩存模塊的主要功能是臨時存放抓取的數據,這些數據包括兩部分,網頁數據與DNS數據,以降低系統地資源消耗,提高數據的處理速度。分析模塊主要是對爬蟲抓取到頁面進行分析,它直接決定主題爬蟲抓取信息的質量和準確率。對抓取得與主題相關的頁面信息,系統將提取頁面的鏈接、內容等主要信息并轉化為結構化數據,以方便下一個模塊進一步處理。存儲模塊是用來存儲主題網絡爬蟲所抓取的符合主題的網頁數據。日志模塊是用來記錄系統中軟硬件的信息,并同時監視系統中發生事件及各自節點的負載情況。當發生錯誤時,用戶可以通過系統日志來檢查錯誤發生的原意,為后續的錯誤排查提供幫助。分布式主題爬蟲在執行數據采集任務時,能同時對多個不同的相關主題進行采集。控制節點通過負載狀態表給每個數據處理節點進行動態作業分配,每個數據處理節點無需考慮鏈接抓取任務的去重。此外,系統還能為提供伸縮服務。在數據采集的過程中,控制節點判斷現在進行的某個主題數據采集資源不夠,需要更多的數據處理節點進行工作時,會將空載或是負載較低的數據處理節點調入進來進行工作。
信息化時代,互聯網的搜索越來越趨于領域化和多元化,人們對能夠準確快速獲取自己想要的信息的需求越來越強烈,主題網路爬蟲在今后的一段時間內都將是研究熱點。本文設計的一種分布式主題爬蟲,在一定程度上提高了搜索引擎的查準率和查全率,優化了系統負載。但由于技術水平有限,在新技術應用方面還有所欠缺,這就需要在今后的工作中進一步研究。