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