国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

分布式爬蟲的研究與實現(xiàn)

2020-04-15 02:50馮錫煒竇予梓高天鑄吳衍兵
計算機技術(shù)與發(fā)展 2020年2期
關(guān)鍵詞:單機爬蟲數(shù)據(jù)量

馬 蕾,馮錫煒,竇予梓,高天鑄,朱 睿,吳衍兵

(遼寧石油化工大學 計算機與通信工程學院,遼寧 撫順 113001)

0 引 言

網(wǎng)絡(luò)爬蟲,是能夠按照程序設(shè)計者所指定的要求,有序、自動地獲取指定網(wǎng)站中有用信息的程序。根據(jù)性能和所用技術(shù)的不同,爬蟲的種類可以分為很多種[1]。

傳統(tǒng)的單機爬蟲,只有一個單一的本地爬取隊列,內(nèi)存空間小,計算空間小,在需要爬取海量數(shù)據(jù)的情況下,已經(jīng)不能滿足實際需求。因此需要找出方法,解決這些問題,優(yōu)化爬取方式,改進解析規(guī)則,使爬取出的數(shù)據(jù)更精準、爬取過程更快速[2]。

將分布式的思想引用到網(wǎng)絡(luò)爬蟲中,分布式文件系統(tǒng)和大型分布式并行計算框架的使用,提高了爬蟲在速度和準確度上的性能。通過搭建分布式集群,擴充了工作資源。通過設(shè)計爬取流程合理分配空間、對抓取隊列進行管理、優(yōu)化爬取規(guī)則、擴充算法,使分布式爬蟲的抓取過程更流暢合理[3]。

文中所研究的基于Nutch的分布式爬蟲就適用于針對大批量數(shù)據(jù)的操作,其可編寫插件的機制利于爬蟲的模塊化和可擴展化。Nutch提供了可擴展接口,用于擴展爬蟲功能,編寫不同的插件可實現(xiàn)不同的操作,根據(jù)不同的需求可實現(xiàn)自定義功能。開源的全文搜索框架Solr直接搜索Nutch獲取的頁面信息,為爬取下來的頁面維護一個索引,也可對抓取結(jié)果進行復雜條件查詢、模糊查詢。在爬取時,可以指定數(shù)據(jù)源獲取信息,使抓取更有針對性和目的性[4-7]。

1 分布式集群的搭建

Nutch依賴于Hadoop,在Hadoop集群中運行可以用于對爬取任務(wù)的批處理。利用HDFS分布式文件系統(tǒng)對所有的數(shù)據(jù)進行訪問與管理,并將MapReduce大型分布式并行計算架構(gòu)與HDFS無縫結(jié)合。在分布式集群中,利用Zookeeper分布式協(xié)調(diào)服務(wù),對分布式各個服務(wù)提供輔助功能,保證集群高效可用[8-9]。

在實際項目中采用Redis這種高性能的Key-Value數(shù)據(jù)庫對數(shù)進行存儲,運用Solr分布式高性能全文搜索引擎,支持對文件、文本等數(shù)據(jù)源建立索引,提供毫秒級查詢。選擇用Squid高性能代理緩存服務(wù)器,它支持FTP、gopher、HTTPS和HTTP協(xié)議,這樣能更好地接受來自需要下載的目標的請求,并且處理這些請求,獲取到信息后,Squid會復制一份,以便下次使用[10]。

2 項目的爬取原理和爬取流程

Nutch作為一種透明,開源,基于Java語言的搜索引擎框架,提供了非常全面的工具,全文搜索和Web爬蟲[11]。

2.1 項目框架

設(shè)計的爬蟲工作流程如圖1所示,總體分為以下幾個步驟:

圖1 爬蟲工作流程

(1)獲取到網(wǎng)頁的內(nèi)容,即下載網(wǎng)頁。需要通過向目標服務(wù)器發(fā)送請求并等待響應(yīng),服務(wù)器響應(yīng)后就能得到想要獲取的內(nèi)容信息;

(2)解析所得到的信息內(nèi)容,獲取到有用的信息。并通過解析到的信息,同時找到其中新的URL加入爬取隊列,獲取新的頁面;

(3)涉及到對爬取出的數(shù)據(jù)保存的問題,分布式爬蟲需要保存的數(shù)據(jù)多樣化,而且數(shù)據(jù)量大,通過Redis這種Key-Value數(shù)據(jù)庫對數(shù)進行存儲。

2.2 通過Nutch定義的抓取流程

Nutch具有強大的可擴展性,有四個可擴展點,可通過編寫其插件實現(xiàn)自定義功能,項目的抓取流程定義如下:

(1)程序會創(chuàng)建一個WebDb文件夾,這個WebDb文件夾用來存放將要抓取的URL。

(2)根據(jù)WebDb中內(nèi)容生成fetchlist,并將fetchlist寫入到相應(yīng)的segment,每個segment內(nèi)最終存儲的是一次抓取循環(huán)中抓到的網(wǎng)頁和網(wǎng)頁的索引。

(3)可以根據(jù)這些fetchlist中的URL抓取所要的網(wǎng)頁。

(4)從網(wǎng)頁中獲取到新的URL,將這些新得到的URL加入到WebDb中,更新WebDb。

循環(huán)進行前面的步驟,直至達到之前預先設(shè)定的抓取深度。

(5)可以根據(jù)WebDb得到的網(wǎng)頁評分和links更新segments;

(6)對所抓取的網(wǎng)頁進行索引,在索引中,要丟棄掉擁有重復內(nèi)容的網(wǎng)頁和重復的URL。

(7)將segments中的索引進行合并生成用于檢索的最終index索引。

上面是定義的基本抓取流程,在實際的抓取過程當中,采用的是廣度優(yōu)先抓取的方法,它貼近所爬取的大部分網(wǎng)站的層次和結(jié)構(gòu),網(wǎng)站相鄰模塊間的內(nèi)容更具有關(guān)聯(lián)性。在爬取時,廣度優(yōu)先策略可以避免對一個網(wǎng)站服務(wù)器在一段時間內(nèi)的反復訪問,可以減少對所爬取網(wǎng)站造成的影響[12]。

3 爬蟲的數(shù)據(jù)解析模塊

通過下載步驟之后獲取到的網(wǎng)頁,要對其進行解析處理,才能從中獲取到所需要的價值信息。傳統(tǒng)的獲取頁面內(nèi)容的方法為使用XPath語句,正則表達式,或者css選擇器。運用這些方式,首先要找到網(wǎng)頁中的節(jié)點,即元素、屬性、文本、命名空間等。例如,XPath使用路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集。

通過上述方法來獲取結(jié)果,不僅需要提前知道網(wǎng)頁的結(jié)構(gòu)邏輯,且對于所要獲取信息,不同的網(wǎng)站信息所處的位置不同,標簽不同,網(wǎng)頁結(jié)構(gòu)不同,這樣不可能對所有頁面做出統(tǒng)一規(guī)則。在爬取大量網(wǎng)頁時,消耗的人力和時間較多。因為Nutch可以嵌入算法,在總結(jié)大量網(wǎng)頁的情況并且對現(xiàn)有的解析算法進行優(yōu)化后,設(shè)計了一種通用的算法將正文提取出來,也使其能更好地與爬蟲框架貼合[12-15]。

4 實 驗

通過對項目的實現(xiàn),對大量數(shù)據(jù)的爬取實驗,對數(shù)據(jù)進行驗證和分析,得出以下實驗結(jié)果。

4.1 運行環(huán)境

Nutch是基于Linux系統(tǒng)內(nèi)核的框架,所以項目框架要發(fā)布運行在Linux系統(tǒng)的服務(wù)器上。項目采用三臺CentOS 7服務(wù)器來搭建分布式集群,CentOS是Linux系統(tǒng),具有高度穩(wěn)定性。集群組件以Yarn、HDFS、Zookeeper、Solr為主,并且支持橫向擴展。集群中NodeManager內(nèi)存12 G,內(nèi)核六顆,Container 1 G內(nèi)存。爬蟲集群角色如圖2所示。

圖2 爬蟲集群角色

4.2 爬蟲中獲取頁面信息模塊的實現(xiàn)

在爬蟲的獲取頁面信息的模塊中,設(shè)計了按照文本密集程度來找到正文的算法。以一篇文章為例,正文的部分主要集中在一定范圍內(nèi),且密集度高,其他部分相對松散不密集,不是要提取的正文部分,按照此特征,可以將算法實現(xiàn)[16-18]。

首先要對頁面進行去除標簽的處理,例如“…”等,去除標簽后再得到的文本信息,可以降低標簽對所要提取內(nèi)容的干擾。去除標簽后,取文本的行號,對文本進行計算,設(shè)定以每五行文本為一組,將五行中所有的字符數(shù)加起來取到和,用第一行的字符數(shù)除以五行累加的字符數(shù)和,得到一個比值d。

其中,M的值為每一行的字符數(shù)目和。

然后,從第二行開始,計算五行所有的字符數(shù)和,用第二行的字符數(shù)除以五行累加的字符數(shù)和,得到一個比值d,再按照第三行計算,以此類推重復計算直到最后。在后面行數(shù)不足五行時總數(shù)按照后五行總數(shù)計算。如果在計算中,連續(xù)幾個得到的數(shù)值大于確定的閾值時,可以判斷從第一個大的數(shù)值所在行開始,進入正文部分。

關(guān)于d的閾值,經(jīng)過大量實際處理調(diào)整,實驗統(tǒng)計,計算得出一個合適的數(shù)值,經(jīng)過專家建議將閾值設(shè)置為0.2。所以d的值數(shù)一般在0.2左右,可以判定為進入正文部分了。

在抽取頁面信息的過程中,對于新發(fā)現(xiàn)的URL是否加入爬取隊列,會有去重機制。對爬取過的網(wǎng)頁信息,會建立一個索引,一起存在WebDb中,新發(fā)現(xiàn)的URL會與爬取過的URL進行對比,如果爬取過直接丟棄不再重復爬取,沒有爬取過則增加索引加入到爬取隊列中并且更新WebDb??梢杂行Ч?jié)省爬取時間,節(jié)省資源,避免不必要的重復數(shù)據(jù)的加入,優(yōu)化爬取流程[19]。

4.3 項目的實現(xiàn)

通過搭建分布式集群,對上述抓取流程和解析過程的實現(xiàn),爬取了大量公司的官網(wǎng)網(wǎng)頁中所展示的內(nèi)容,規(guī)定爬取網(wǎng)站上盡可能全面的信息。爬取的網(wǎng)站數(shù)目多,每一家公司網(wǎng)站不相同,深度,樣式不統(tǒng)一,數(shù)據(jù)量就不能確定,因此不對爬取深度做要求。把爬取后的數(shù)據(jù)放入到Solr引擎中,Solr會對數(shù)據(jù)進行管理,方便搜索。

通過測試發(fā)現(xiàn),分布式爬蟲有很好的爬取性能。在Solr引擎中展示的所爬取的信息,其中有URL地址和所爬取的具體正文內(nèi)容。

4.4 爬蟲關(guān)鍵詞匹配信息模塊

運用爬蟲技術(shù)從網(wǎng)頁中爬取的信息數(shù)量龐大且有冗余,同時摻雜有用的數(shù)據(jù)和無用的數(shù)據(jù),因此,從大量所得的數(shù)據(jù)中提取出真正所需要的信息十分必要。普通的爬蟲不能區(qū)分什么是有用的數(shù)據(jù),什么是無用的數(shù)據(jù)。以“市場占有率”的相關(guān)信息為例,從網(wǎng)絡(luò)中爬取并且存儲下來[20-22]。根據(jù)相應(yīng)指標關(guān)鍵字,從數(shù)據(jù)中抽取有用信息的方法如下:

以獲取到的頁面信息為對象,首先要對文本進行過濾處理,過濾掉文本中夾雜的“ ”換行符、空格等內(nèi)容,這些符號不必要且干擾后續(xù)分析。以句號“?!睘椴鸱址?,對文本進行初步拆分。然后將拆分后的每一句話再進行拆分,拆分成詞組的形式。根據(jù)指標對應(yīng)的關(guān)鍵詞,對拆分好的詞組進行權(quán)重計算,提取出權(quán)重大于0的句子,并且對其排序,根據(jù)權(quán)重排序,只取權(quán)重高的前三句話。其中權(quán)重的計算方法如下:

基于句子間的內(nèi)容覆蓋率,給定兩個句子Si和Sj,采用如下公式進行計算:

其中,分子tk是在兩個句子中都出現(xiàn)的詞組的數(shù)量,|Si|是句子i的詞組數(shù),|Sj|是句子j的詞組數(shù)。

這兩個句子語義相關(guān),并將它們連接起來,即權(quán)重:

Wij=Similarity(Si,Sj)

表1為對按照“市場占有率”此項指標進行匹配算法分析后的結(jié)果。

表1 算法解析后的結(jié)果

通過表1可以看出,通過對一些指標的解析和匹配查找,分析出了所爬取網(wǎng)頁中和此項指標相關(guān)聯(lián)的信息。例如,“市場占有率”此項指標,從采集到的數(shù)據(jù)中解析出所需信息,印證了在數(shù)據(jù)爬取階段,分布式爬蟲可以自動完成數(shù)據(jù)的收集、解析、格式化存儲,所采集的數(shù)據(jù)全面、高效。

4.5 實驗分析

Nutch底層基于MapReduce,直接受益于分布式的所有優(yōu)點,可以在集群中對資源進行調(diào)配和監(jiān)控,可以很好地管理爬蟲。

4.5.1 爬蟲速度分析

在實驗中,使用分布式爬蟲和單機爬蟲分別對相同的300家公司進行抓取,要求按照域名,爬取每家公司官網(wǎng)中所有展示的允許爬取的信息,觀察爬蟲速度上的性能。在爬取時,分布式爬蟲每次所抓取的公司數(shù)量大致成整數(shù)倍增加,以此來測定爬蟲爬取數(shù)量對爬取速度的影響。單機爬蟲因為其自身性能限制,在爬取過程中只能對每個公司分別爬取,在實驗過程中單機爬蟲爬取前相同50家公司時,用了17個小時。為了對數(shù)據(jù)做比較分析,將分布式爬蟲和單機爬蟲爬取時間統(tǒng)一用分鐘做單位。單機爬蟲和分布式爬蟲抓取公司的數(shù)量,抓取此數(shù)目公司所花費的時間和速度,對照如表2所示。

表2 爬蟲所爬取的公司數(shù)量和抓取

圖3為單機爬蟲和分布式爬蟲爬取數(shù)量和平均抓取速度折線對比圖。可以看出,分布式爬蟲在抓取大量信息上具有很強的優(yōu)勢。在一定范圍內(nèi),爬取的數(shù)據(jù)量越大,分布式爬蟲速度越快,越能現(xiàn)實其分布式的優(yōu)點。而單機爬蟲不僅操作繁瑣,在性能上也不及分布式爬蟲。分布式爬蟲在大量數(shù)據(jù)采集中優(yōu)勢明顯。

圖3 爬蟲爬取數(shù)量和速度

4.5.2 爬蟲數(shù)據(jù)量分析

對于爬蟲所爬取的數(shù)據(jù)量的分析,要在一段規(guī)定的時間內(nèi),查看爬蟲爬取的數(shù)據(jù)量,性能高的爬蟲在實際的爬取作業(yè)中占有優(yōu)勢。一些所爬取的網(wǎng)站可能會有爬取時間的限制,在相同的較短的時間內(nèi),爬取的數(shù)據(jù)量越大,所收集的信息相對就越全面。實驗過程中,分別用分布式爬蟲和單機爬蟲來爬取相同的公司,查看在相同的固定時間內(nèi)分別爬取的數(shù)據(jù)量。爬取的時間成遞增趨勢,爬取的時間和對應(yīng)的所爬取的數(shù)據(jù)量如表3所示。

表3 爬蟲爬取時間和對應(yīng)爬取數(shù)據(jù)量對照

圖4 基于Nutch的分布式爬蟲和其它

表3為單機爬蟲和分布式爬蟲在統(tǒng)一規(guī)定時間內(nèi)爬取時間和對應(yīng)爬取數(shù)量的對照,體現(xiàn)了基于Nutch分布式爬蟲在抓取大量信息上所具有的優(yōu)勢。在相同的時間內(nèi),分布式爬蟲所抓取的數(shù)據(jù)量明顯多于普通單機爬蟲,相對而言,爬取信息自然也更全面。

圖4為基于Nutch的分布式爬蟲和其它分布式爬蟲爬取數(shù)據(jù)量對比柱狀圖,從數(shù)據(jù)中可以看出,在相同時間內(nèi),基于Nutch的分布式爬蟲所抓取數(shù)據(jù)量在一定程度上明顯多于其它分布式爬蟲所抓取的數(shù)據(jù)量,基于Nutch的分布式爬蟲在性能上更優(yōu)。

5 結(jié)束語

通過調(diào)研和總結(jié),了解了目前網(wǎng)絡(luò)爬蟲的存在價值和意義,分布式爬蟲的優(yōu)勢,以及實現(xiàn)方法等。通過對分布式集群環(huán)境的搭建,運用Nutch對大量網(wǎng)站的爬取、解析,印證了項目設(shè)計和實現(xiàn)的可行性。Nutch爬蟲的可擴展性和靈活性有很重要的意義。在異構(gòu)數(shù)據(jù)的融合上,所設(shè)計的自動去重機制使爬蟲在工作中對于相同地址不做重復爬取,從源頭上避免了數(shù)據(jù)的重復。設(shè)計的提取頁面信息模塊,能準確找出網(wǎng)頁中展示的信息,關(guān)鍵詞匹配模塊,可以根據(jù)關(guān)鍵詞語義有效匹配出所要收集的信息,高效準確。方便快捷的檢索能力,極大地方便了用戶,為其帶來了極好的體驗。

將爬蟲技術(shù)與其他它有其它技術(shù)相結(jié)合,更好地服務(wù)生活,將是接下來研究的目標。

猜你喜歡
單機爬蟲數(shù)據(jù)量
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
一種單機式渦流探傷儀電性能校準裝置
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
高刷新率不容易顯示器需求與接口標準帶寬
民用飛機單機設(shè)計資料管理方案探索
基于Scrapy框架的分布式網(wǎng)絡(luò)爬蟲的研究與實現(xiàn)
誰搶走了低價機票
AMAC
基于Hadoop的舌部圖像預處理時間對比研究
放射性廢液輸送設(shè)施調(diào)試大綱及設(shè)備單機負荷調(diào)試