黃詩涵 韋廷岳 靳一飛 黃猛
摘? 要:網(wǎng)絡(luò)技術(shù)快速發(fā)展,信息資源多種多樣,面對具有范圍廣、信息量大等特點的地震數(shù)據(jù)共享平臺,如何快速又準(zhǔn)確地抓取有用的相關(guān)信息十分重要,因此爬蟲為該地震數(shù)據(jù)共享平臺的重要技術(shù)之一。構(gòu)建使用Docker部署的基于Golang的Crawlab的爬蟲框架進(jìn)行數(shù)據(jù)爬取及數(shù)據(jù)處理的地震數(shù)據(jù)共享平臺,解決傳統(tǒng)爬蟲技術(shù)在面對龐大數(shù)據(jù)量時會出現(xiàn)的效率低下問題。
關(guān)鍵詞:地震數(shù)據(jù);地震數(shù)據(jù)共享;Golang;Docker;數(shù)據(jù)處理
中圖分類號:TP391.3;P315.69? ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)02-0028-02
Abstract:With the rapid development of network technology and a variety of information resources,the seismic data sharing platform with wide range and large amount of information is facing,it is very important to grasp useful information quickly and accurately in the face of the seismic data sharing platform with wide range and large amount of information. Therefore,crawler is one of the important technologies of the seismic data sharing platform. A crawler framework of Crawler based on Golang deployed by Docker is constructed to share seismic data for data crawling and data processing,so as to solve the inefficient problem of traditional crawler technology in the face of huge data volume.
Keywords:seismic data;seismic data sharing;Golang;Docker;data processing
0? 引? 言
由于地震數(shù)據(jù)涵蓋內(nèi)容多、范圍廣、動態(tài)性強(qiáng)、數(shù)據(jù)量大等特點,面向地震數(shù)據(jù)共享,我們要構(gòu)建一個覆蓋面廣泛、動態(tài)性強(qiáng)、能夠?qū)崟r分享地震相關(guān)數(shù)據(jù)功能的地震數(shù)據(jù)共享平臺。因此該地震數(shù)據(jù)共享平臺研究中國歷史地震的地理位置分布,分析多震區(qū)和少震區(qū)地理位置的差異,實現(xiàn)中國歷史地震和斷裂帶在地圖上的展示功能,研究地震后群眾通過各大主流網(wǎng)絡(luò)平臺對地震的關(guān)注情況。地震數(shù)據(jù)共享平臺使用爬蟲技術(shù)去爬取在發(fā)生地震后群眾的關(guān)注數(shù)據(jù),以及各大主流網(wǎng)站信息的報道情況,使用數(shù)據(jù)清洗,將相同的數(shù)據(jù)去重,再對處理后的數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘,以實現(xiàn)對各主流網(wǎng)站在地震發(fā)生時最新發(fā)布的地震相關(guān)信息的實時動態(tài)爬取和分析。
1? 使用爬蟲技術(shù)的原因
該地震數(shù)據(jù)共享平臺要以大量的地震相關(guān)數(shù)據(jù)作為實現(xiàn)技術(shù)和功能的基礎(chǔ),為了實現(xiàn)達(dá)到數(shù)據(jù)量大、動態(tài)性強(qiáng)、受眾范圍廣等特點的地震數(shù)據(jù)共享平臺的構(gòu)建,需要進(jìn)行大量的數(shù)據(jù)挖掘工作,第一步就是獲取基礎(chǔ)信息數(shù)據(jù),對多個主流網(wǎng)站進(jìn)行信息獲取,如與地震有關(guān)的地震新聞、地震現(xiàn)場圖片、地震現(xiàn)場視頻以及相關(guān)報道等等。有了基礎(chǔ)地震相關(guān)數(shù)據(jù)后,并不能直接使用,而是要進(jìn)行一系列地震數(shù)據(jù)處理,將重復(fù)、虛假、無用的數(shù)據(jù)進(jìn)行剔除,經(jīng)過重重篩選之后再對剩下的地理數(shù)據(jù)進(jìn)行相關(guān)分析,分門別類存入不同的數(shù)據(jù)庫中,方便后期對地理數(shù)據(jù)的使用。因此需要使用具有多重篩選功能的爬蟲技術(shù)去實現(xiàn)網(wǎng)頁內(nèi)容的部分展示。
2? 選擇基于Golang的Crawlab爬蟲框架的原因
當(dāng)前熱門的Python語言具有使用簡單、功能強(qiáng)大、語言生態(tài)良好等特點,但面對需要大量爬取信息的需求時,Python作為一門腳本語言運行速度慢,為了利用多核,Python開始支持多線程,而解決多線程之間數(shù)據(jù)完整性和狀態(tài)同步最簡單的方法就是加鎖,于是使用了GIL(Global Interpreter Lock),越來越多的代碼庫開發(fā)者接受了這種設(shè)定后,開始大量依賴這種特性,GIL無疑就是一把全局排他鎖,全局鎖的存在會對多線程的效率有不小影響,甚至使Python幾乎等于一個單線程的程序。為了讓各個線程能夠平均利用CPU時間,Python會計算當(dāng)前已執(zhí)行的微代碼數(shù)量,達(dá)到一定閾值后就強(qiáng)制釋放GIL,而這時也會觸發(fā)一次操作系統(tǒng)的線程調(diào)度,這種模式在只有一個CPU核心的情況下沒有什么問題,但當(dāng)CPU有多個核心時就會出現(xiàn)問題?;贕IL的并發(fā)模型,其效率不足以滿足該項目的需要,而Golang作為谷歌推出的一門編程語言,具有部署簡單、并發(fā)性好、語言設(shè)計良好、執(zhí)行性能好等優(yōu)勢,且能夠快速編譯,高效執(zhí)行,易于開發(fā),兼具效率、性能、安全、健壯等特性,所以平臺的構(gòu)建選擇基于Golang語言的爬蟲調(diào)度框架。
由Golang來啟用多個Python進(jìn)程,克服Python并發(fā)效率問題的同時作為網(wǎng)絡(luò)爬蟲框架的處理模塊需要有三個:下載器、分析器和條目處理管道,再加上控制模塊,就可以清晰地明白框架的劃分。根據(jù)這些,我們可以實現(xiàn)自定義的、自己需要的爬蟲框架的設(shè)計。而基于Golang的分布式爬蟲管理平臺,支持多種編程語言,具有配置爬蟲、自動提取字段、上傳爬蟲等功能。該框架主要解決的是大量爬蟲管理困難的問題,例如需要監(jiān)控上百個網(wǎng)站的項目,不容易做到同時管理,而且成本高且容易出錯,此時該框架可以幫助對所寫爬蟲進(jìn)行有效的監(jiān)控管理,成為該地震數(shù)據(jù)共享平臺的首選。
3? 地震數(shù)據(jù)共享平臺框架的介紹
該地震數(shù)據(jù)共享平臺的Crawlab爬蟲框架基于Golang的分布式爬蟲管理平臺,支持Python、Node.js、Go、Java、PHP等多種編程語言。該框架的安裝有三種,第一種是基于Docker部署,第二種是直接部署,第三種是基于Kubernetes部署。這三種部署方式中,本文認(rèn)為基于Docker部署是比較方便且省時間的部署方式,故使用了Docker部署。
Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,也可以實現(xiàn)虛擬化。容器完全使用沙箱機(jī)制,相互之間不會有任何接口。Docker可以利用已存在的鏡像幫助構(gòu)建一些常用的服務(wù)和應(yīng)用,例如Nginx、MongoDB、Redis等等。用Docker運行一個MongoDB服務(wù)僅需docker run-d--name mongo-p 27017:27017 mongo一行命令。也可以使用docker-compose的方式部署,docker-compose是一種集群管理方式,可以利用名為docker-compose.yml的YAML文件來定義需要啟動的容器,可以是單個,但通常是多個的。環(huán)境配置是由Go第三方庫viper來實現(xiàn)的。當(dāng)程序啟動時,viper會去讀取YAML配置文件,以及將環(huán)境變量與配置文件中的變量對應(yīng)起來。
該框架主要包括四部分,分別是:節(jié)點、爬蟲、任務(wù)、定時任務(wù)。節(jié)點可以看作是一個服務(wù)器,負(fù)責(zé)執(zhí)行爬蟲提供API等功能。節(jié)點之間是可以相互通信的,節(jié)點通信主要通過Redis。該爬蟲框架可以自動部署爬蟲,可以實現(xiàn)每60秒主節(jié)點將該節(jié)點上的爬蟲文件同步給所有在線節(jié)點。在爬蟲文件運行一段時間之后,爬蟲會積累一些統(tǒng)計數(shù)據(jù),并將這些指標(biāo)進(jìn)行匯總。
該框架的架構(gòu)包括了一個主節(jié)點(Master Node)和多個工作節(jié)點(Worker Node),以及負(fù)責(zé)通信和數(shù)據(jù)儲存的Redis和MongoDB數(shù)據(jù)庫。前端應(yīng)用向主節(jié)點請求數(shù)據(jù),主節(jié)點通過MongoDB和Redis來執(zhí)行任務(wù)派發(fā)調(diào)度以及部署,工作節(jié)點收到任務(wù)之后,開始執(zhí)行爬蟲任務(wù),并將任務(wù)結(jié)果儲存到MongoDB。主節(jié)點是整個Crawlab架構(gòu)的核心,屬于Crawlab的中控系統(tǒng)。
4? 爬蟲數(shù)據(jù)處理的實現(xiàn)
在爬取相關(guān)數(shù)據(jù)后,要根據(jù)相關(guān)地震數(shù)據(jù)共享平臺對數(shù)據(jù)的需要,對已有數(shù)據(jù)進(jìn)行一系列的數(shù)據(jù)篩選,剔除掉重復(fù)、虛假、無用的數(shù)據(jù)信息。篩選結(jié)束后,再進(jìn)行自然語言處理,對數(shù)據(jù)分類聚類,信息檢索過濾,對數(shù)據(jù)進(jìn)行清洗,得到符合要求的數(shù)據(jù)。數(shù)據(jù)的清洗包括去除無效的數(shù)據(jù)、整理成規(guī)整的格式等等。經(jīng)過多重數(shù)據(jù)處理后,還需要采用數(shù)據(jù)標(biāo)識,根據(jù)數(shù)據(jù)的類型對處理后的數(shù)據(jù)分類標(biāo)注,為實現(xiàn)數(shù)據(jù)同步,先對全量數(shù)據(jù)拷貝,然后再采用增量的方式抓取更新時間或者檢查點以后的數(shù)據(jù)同步更新。經(jīng)過以上數(shù)據(jù)處理之后,將爬蟲篩選處理之后的數(shù)據(jù)進(jìn)行最后一步操作——插入數(shù)據(jù)庫,這樣就完成了爬蟲數(shù)據(jù)相關(guān)處理的實現(xiàn)。
5? 結(jié)? 論
傳統(tǒng)的搜索雖然能給我們提供很多信息資源,但有時并不能滿足我們對具有范圍廣、量度大等特點的信息資源的獲取,因此需要我們使用爬蟲技術(shù)去從多角度獲取所需資源。所以爬蟲技術(shù)是本文構(gòu)建地震數(shù)據(jù)共享平臺應(yīng)用的主要技術(shù)之一,實現(xiàn)一個基于Golang的Crawlab爬蟲框架的搭建對于整個地震數(shù)據(jù)共享平臺有著十分重要的作用,其爬蟲框架的實現(xiàn)優(yōu)劣也直接影響到地震數(shù)據(jù)共享平臺的性能。
參考文獻(xiàn):
[1] 詹小艷,許紅梅,朱升初,等.江蘇省地震科學(xué)數(shù)據(jù)共享平臺技術(shù)研究 [J].防災(zāi)科技學(xué)院學(xué)報,2012,14(1):57-63.
[2] 袁媛,尹京苑.上海地震科學(xué)數(shù)據(jù)共享服務(wù)平臺建設(shè) [J].華北地震科學(xué),2014,32(1):16-21.
[3] 高賢康.淺析Docker技術(shù)在Web服務(wù)系統(tǒng)中的應(yīng)用 [J].電腦迷,2017(6):55.
[4] 唐曉光.基于訂閱機(jī)制的數(shù)據(jù)共享平臺的研究與設(shè)計 [D].大慶:東北石油大學(xué),2013.
[5] 田建勇.基于云計算的Web數(shù)據(jù)挖掘研究 [J].信息安全與技術(shù),2015,6(4):29-30.
[6] 孫冰.基于Python的多線程網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn) [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2018(4): 38-39.
[7] 王靜.面向互聯(lián)網(wǎng)輿情分析的海量數(shù)據(jù)檢索模型關(guān)鍵技術(shù)研究 [D].北京:首都師范大學(xué),2013.
[8] 孫立偉,何國輝,吳禮發(fā).網(wǎng)絡(luò)爬蟲技術(shù)的研究 [J].電腦知識與技術(shù),2010,6(15):4112-4115.
作者簡介:黃詩涵(2000.03-),女,漢族,河南駐馬店人,本科,學(xué)士學(xué)位,研究方向:人工智能和軟件開發(fā)應(yīng)用。