APP下载

基于Golang的地震数据共享平台Crawlab爬虫框架的实现

2020-07-09黄诗涵韦廷岳靳一飞黄猛

现代信息科技 2020年2期
关键词:爬虫框架节点

黄诗涵 韦廷岳 靳一飞 黄猛

摘  要:网络技术快速发展,信息资源多种多样,面对具有范围广、信息量大等特点的地震数据共享平台,如何快速又准确地抓取有用的相关信息十分重要,因此爬虫为该地震数据共享平台的重要技术之一。构建使用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-),女,汉族,河南驻马店人,本科,学士学位,研究方向:人工智能和软件开发应用。

猜你喜欢

爬虫框架节点
框架
基于Python的网络爬虫和反爬虫技术研究
Python反爬虫设计
基于移动汇聚节点和分簇的改进节能路由算法
CAE软件操作小百科(48)
基于点权的混合K-shell关键节点识别方法
浅谈框架网页的学习
基于Scrapy框架的分布式网络爬虫的研究与实现
谁抢走了低价机票
基于Jmeter对Node框架性能的测试研究