張勝敏,王愛菊
(1.開封大學 信息工程學院,河南 開封 475004;2.鄭州工程技術學院 信息工程學院,河南 鄭州 450044)
隨著物聯(lián)網(wǎng)技術的快速發(fā)展,網(wǎng)絡資源量不斷增加,相應的,對網(wǎng)絡信息檢索技術的要求也在逐漸提高。如何快速準確地檢索出網(wǎng)絡信息成為搜索引擎研究面臨的重要課題。像百度、Google、搜狗等常用的搜索引擎都存在著一定的局限性。現(xiàn)有的檢索方式包括基于關鍵詞的檢索、基于特定語義的檢索等等?;陉P鍵詞的檢索是常用的搜索方式,該方式簡單便捷,但檢索的結(jié)果與預期還存在較大的差距。搜索引擎發(fā)展面臨種種挑戰(zhàn),需要有效應對,定向抓取網(wǎng)絡資源的網(wǎng)絡爬蟲技術由此產(chǎn)生。網(wǎng)絡爬蟲是一個按照特定主題和一定規(guī)則來抓取網(wǎng)絡上頁面資源的檢索程序,它為搜索引擎提供檢索數(shù)據(jù)。該檢索程序已經(jīng)被廣泛應用,目前在各種搜索引擎中都存在。網(wǎng)絡爬蟲抓取網(wǎng)頁資源的原理是:從種子YRL數(shù)據(jù)集合入手,提取出種子YRL在頁面上內(nèi)部鏈接的YRL。在抓取頁面資源的過程中,需要不斷從當前網(wǎng)絡頁面上抽取新的YRL放入YRL種子集合,從YRL種子集合中篩選出符合抓取主題條件的YRL,然后開始抓取網(wǎng)頁資源,如此循環(huán)往復,直至滿足檢索引擎預先設定的抓取深度為止。網(wǎng)絡爬蟲會根據(jù)抓取主題,有針對性地抓取網(wǎng)絡上的頁面資源,以此獲取與主題相關的網(wǎng)頁信息。網(wǎng)絡爬蟲的開發(fā)與使用解決了搜索引擎的一部分問題,相對于搜索引擎原有的數(shù)據(jù)檢索程序而言,它是先進的,但還不夠,它還需要解決定義抓取主題、大量過濾網(wǎng)絡數(shù)據(jù)、URL抓取策略等問題。目前常用的網(wǎng)絡爬蟲主要分為單一主題網(wǎng)絡爬蟲和聚焦網(wǎng)絡爬蟲。這兩種網(wǎng)絡爬蟲由于抓取主題單一,所以檢索結(jié)果的數(shù)據(jù)量龐大,需要對其進行二次檢索,檢索過程繁瑣?,F(xiàn)實表明,傳統(tǒng)的網(wǎng)絡爬蟲已經(jīng)無法滿足搜索引擎發(fā)展的需求。本文設計了一種基于Python的分布式多主題網(wǎng)絡爬蟲,目的是提高搜索引擎的搜索效率和精度。
網(wǎng)絡爬蟲需要完成的主要任務是獲取CEO的Series數(shù)據(jù)庫中的所有網(wǎng)頁資源。要通過超鏈接的方式,使網(wǎng)頁與爬蟲相對應,實現(xiàn)高效、快速、準確的抓取,取得良好的應用效果。此次網(wǎng)絡爬蟲設計與傳統(tǒng)爬蟲設計最大的不同之處就是在設計中加入了Python技術,實現(xiàn)了分布式多主題網(wǎng)頁資源抓取。此次設計的網(wǎng)絡爬蟲要滿足可擴展性、跨平臺性、高能性、健壯性等設計需求[1]。其中,可擴展性和跨平臺性主要體現(xiàn)為網(wǎng)絡爬蟲能夠應用到多個檢索領域。網(wǎng)絡爬蟲需要根據(jù)分布式多主題抓取到大量的網(wǎng)頁資源,這些網(wǎng)頁資源由于來源不同,所以其數(shù)據(jù)格式也有所不同。網(wǎng)絡爬蟲因為要容納多種格式的網(wǎng)頁資源,所以必須具備較強的可擴展性和跨平臺性。高能性體現(xiàn)為網(wǎng)絡爬蟲既能獲取大量的網(wǎng)頁信息,還能保持較快的抓取速度,具有很高的抓取效率。高能性是網(wǎng)絡爬蟲必須具備的基礎性能[2]。健壯性主要體現(xiàn)為網(wǎng)絡爬蟲能夠有效處理各種疑難問題、消除各種異?,F(xiàn)象且遵循最優(yōu)的抓取途徑。Python技術為網(wǎng)絡爬蟲提供了合理的程序異常處理手段與抓取途徑。網(wǎng)絡爬蟲在抓取網(wǎng)頁資源的過程中,會遇到各種異?,F(xiàn)象,比如由程序錯誤導致的閃退、突然死機、網(wǎng)頁編碼不合理等,所以網(wǎng)絡爬蟲必須具備健壯性,擁有強大的能力,能夠有效處理各種疑難問題、消除各種異?,F(xiàn)象且遵循最優(yōu)的抓取途徑,這是十分重要的。以下分別從架構與抓取途徑兩個方面,進行基于Python的分布式多主題網(wǎng)絡爬蟲設計。
根據(jù)上文對網(wǎng)絡爬蟲的功能需求和性能需求的分析,我們將網(wǎng)絡爬蟲的構架設計為分布式架構,其目的是使網(wǎng)絡爬蟲實現(xiàn)多主題并行搜索,提高網(wǎng)絡爬蟲的整體性能,以此實現(xiàn)分布式多主題網(wǎng)絡爬蟲的設計目標[3]。此次設計的分布式網(wǎng)絡爬蟲架構主要包括物理架構與邏輯架構。其中,物理架構由Python集群與Storm集群兩部分組成,邏輯架構由指標計算部分和處理部分組成。
圖1為基于Python的分布式多主題網(wǎng)絡爬蟲物理架構。從圖1中可以看出,Python集群與Storm集群這兩個集群是分開的。這兩個集群也可以部署在同一臺機器上,此次將這兩個集群分開設計,主要是考慮到網(wǎng)絡爬蟲的運行壓力。為了避免Python集群與Storm集群對網(wǎng)絡爬蟲造成運行壓力,增強網(wǎng)絡爬蟲對網(wǎng)頁資源的抓取性能,我們采用了分開部署的方式。Python集群主要負責網(wǎng)絡爬蟲的程序運行。部署Python集群的目的是提高網(wǎng)絡爬蟲的分布式存儲能力和分布式計算能力。Python集群可以將每個網(wǎng)絡爬蟲任務都劃分成多個子任務,并將它們分布到各個Name Node節(jié)點上,同時,將爬蟲抓取到的網(wǎng)頁資源儲存到集群中。Storm集群主要負責實時計算出網(wǎng)絡爬蟲抓取指標的結(jié)果,該指標是指網(wǎng)絡爬蟲抓取頁面階段與分析頁面階段產(chǎn)生的相關指標數(shù)據(jù)。
圖1 基于Python的分布式多主題網(wǎng)絡爬蟲物理架構
除了設計分布式網(wǎng)絡爬蟲物理架構之外,根據(jù)網(wǎng)絡爬蟲的功能需求和抓取流程需求,我們又設計了分布式網(wǎng)絡爬蟲的邏輯架構。組成邏輯架構的指標計算部分和處理部分,是與分布式網(wǎng)絡爬蟲物理架構中的兩部分一一對應的[4]。處理部分主要負責網(wǎng)絡爬蟲抓取任務的實現(xiàn),抓取到的網(wǎng)頁資源,利用分布式數(shù)據(jù)庫Hlbase進行儲存;指標計算部分在Storm集群平臺上實現(xiàn),該部分配合Storm集群,實時計算網(wǎng)絡爬蟲在抓取過程中產(chǎn)生的相關指標數(shù)據(jù),并將計算結(jié)果同樣利用分布式數(shù)據(jù)庫Hlbase儲存起來。
通過以上步驟和方式,實現(xiàn)了分布式多主題網(wǎng)絡爬蟲架構設計。
此次設計了三種網(wǎng)絡爬蟲抓取途徑,包括API接口抓取數(shù)據(jù)、GUI接口下載數(shù)據(jù)[5]、編寫爬蟲程序下載數(shù)據(jù)。
1.2.1 API接口抓取數(shù)據(jù)
API是一種應用程序編程接口,該接口通過預先定義的函數(shù)為應用程序提供訪問一組例程的能力。傳統(tǒng)網(wǎng)絡爬蟲抓取路徑接口需要編寫函數(shù)以及理解爬蟲內(nèi)部的抓取機制,導致網(wǎng)絡爬蟲抓取效率較低。此次運用API接口設計了一條抓取路徑,API接口使用起來比較簡單便捷。通過改進接口,可以使網(wǎng)絡爬蟲快速獲取所需要的網(wǎng)頁資源,而不需要了解網(wǎng)絡爬蟲的具體抓取過程。用一個API接口直接下載網(wǎng)頁數(shù)據(jù),可以有效保證抓取數(shù)據(jù)格式、數(shù)據(jù)結(jié)構的完整性。
1.2.2 GUI接口下載數(shù)據(jù)
GUI接口抓取路徑是為網(wǎng)絡圖形數(shù)據(jù)資源抓取服務的。GUI是一種圖形接口,該接口擁有強大的圖形獲取功能,網(wǎng)絡爬蟲通過該接口,完成圖形等網(wǎng)頁資源的抓取,并將抓取到的網(wǎng)頁資源以最直觀的圖形方式呈現(xiàn)出來。該途徑不需要網(wǎng)絡爬蟲記憶大量的抓取命令,網(wǎng)絡爬蟲只需要執(zhí)行少量的選擇命令、執(zhí)行命令即可完成抓取任務。該途徑占用的網(wǎng)絡資源較少,且具有較高的可靠性。
1.2.3 編寫爬蟲程序下載數(shù)據(jù)
編寫爬蟲程序抓取路徑相對于前兩種路徑,具有高效率、高質(zhì)量抓取等優(yōu)點,使網(wǎng)絡爬蟲可以在互聯(lián)網(wǎng)大量的公開數(shù)據(jù)抓取中支持正則表達式操作。該路徑擁有強大的腳本語言系統(tǒng)作為抓取支持。該路徑是運用hadoop編寫技術設計的。通過該路徑,可以精準獲取到與主題相關的數(shù)據(jù)。操作簡單高效,接口穩(wěn)定性好,并且還能增強網(wǎng)絡爬蟲的穩(wěn)健性能[6]。
本文設計了三種網(wǎng)絡爬蟲抓取路徑,完成了基于Python的分布式多主題網(wǎng)絡爬蟲研究。
此次根據(jù)搜索引擎對網(wǎng)絡爬蟲的需求,設計了一種基于Python的分布式多主題網(wǎng)絡爬蟲。為了證明該網(wǎng)絡爬蟲能夠更好地滿足搜索引擎的檢索需求,我們進行一組對比實驗,將兩種網(wǎng)絡爬蟲應用到同一種搜索引擎上,對比兩種網(wǎng)絡爬蟲的抓取速度。實驗環(huán)境中,共部署了5臺R780機架式服務器,將其中3臺服務器分配到Python集群,2臺服務器分配到Storm集群。表1為5臺服務器的部署情況。
表1 網(wǎng)絡爬蟲服務器配置參數(shù)
此次實驗共進行8次檢測,每次都給兩個網(wǎng)絡爬蟲各分配100個抓取任務,以檢驗此次設計的網(wǎng)絡爬蟲的抓取速度。圖2為兩種網(wǎng)絡爬蟲抓取速度對比圖。
圖2 兩種網(wǎng)絡爬蟲抓取速度對比
圖2顯示,此次設計的網(wǎng)絡爬蟲平均抓取速度為65000YRL/h,而傳統(tǒng)爬蟲平均抓取速度為35000 YRL/h,遠遠低于此次設計的網(wǎng)絡爬蟲。實驗證明,此次設計的基于Python的分布式多主題網(wǎng)絡爬蟲擁有較高的抓取速度。
此次將Python技術應用到網(wǎng)絡爬蟲設計中,推出一個分布式多主題網(wǎng)絡爬蟲,該設計提高了網(wǎng)絡爬蟲對網(wǎng)頁資源的抓取速度。實驗證明,該網(wǎng)絡爬蟲具有較高的應用價值。目前,該網(wǎng)絡爬蟲處在研發(fā)初級階段,還存在一些不足之處,需要通過深入研究而不斷完善。期待不久的將來,它在搜索引擎中被廣泛應用。