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