掌桥专利:专业的专利平台
掌桥专利
首页

一种分布式数据采集方法、系统、服务器和存储介质

文献发布时间:2023-06-19 09:29:07


一种分布式数据采集方法、系统、服务器和存储介质

技术领域

本发明实施例涉及数据爬取领域,尤其涉及一种分布式数据采集方法、系统、服务器和存储介质。

背景技术

随着网络大数据时代来临,企业为了保持竞争力,需要追踪了解市场动向,这往往需要对数据进行分析。数据作为分析的依据,其来源不只限于业务数据,还需从互联网获取更多的数据资源。为获取数据资源需要投入大量人力资源及时间成本,实现自动化采集数据可以节省大量的人力资源及时间成本。随着科技的的发展,网络爬虫在自动化采集过程中发挥着重要作用。目前比较流行的网络爬虫框架是Scrapy,Scrapy很好的集成了任务调度、去重、网页下载、数据解析和数据保存等功能。

但是为了实现快速高效的数据采集,有时需要考虑分布式爬取,而Scrapy只能单机运行。Scrapy-redis虽然实现了分布式,但是它的调度机制会导致爬取速度降低和占用Redis大量的存储空间。同时,为了满足日益增加的爬取任务,原有的框架在快速部署和稳定性方面都需要优化。

发明内容

本发明提供一种分布式数据采集方法,通过在分布式爬虫系统中的各个分服务器共享任务队列,实现了数据爬取的快速和稳定性,降低了占据redis的存储空间。

第一方面,本发明提供一种分布式数据采集方法,由分布式爬虫系统的分节点爬虫引擎执行,包括:

从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取;

确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求;

将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据;

向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

进一步地,所述数据获取请求包括关键请求参数,则所述将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,包括:

从预设的IP代理池中获取一个或多个第一IP;

将所述一个或多个第一IP分配至所述一个或多个下载器;

将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于所述第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

进一步地,所述将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于所述第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据之后,还包括:

判断所述下载器是否获取到所述目标数据;

若否,则从所述IP代理池中获取与所述第一IP不同的第二IP;

将所述第二IP发送至所述下载器,以使所述下载器基于所述第二IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

进一步地,所述从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,还包括:

实时监听所述共享任务队列,以判断所述共享任务队列中是否有所述爬虫任务;

若有,则获取所述爬虫任务。

进一步地,所述将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据之后,还包括:

判断所述目标数据中是否包括新增的所述任务参数;

若有,则基于所述任务参数生成所述爬虫任务;

将所述爬虫任务添加至所述共享任务队列。

进一步地,所述分布式爬虫系统基于docker架构,则还包括:基于用户需求,通过docker架构执行扩展或拆除爬虫服务。

第二方面,本发明提供一种分布式数据采集系统,包括:

获取模块,用于从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取;

任务参数确定模块,用于确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求;

采集模块,用于将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据;

同步更新模块,用于向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

进一步地,所述数据获取请求包括关键请求参数,则所述采集模块还用于从预设的IP代理池中获取第一IP;将所述第一IP分配至所述下载器;将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于不同的第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

第三方面,本发明提供一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如上述任一所述的一种分布式数据采集方法。

第四方面,本发明提供一种终端可读存储介质,其上存储有程序,其特征在于,所述程序被处理器执行时能够实现如上述任一所述的一种分布式数据采集方法。

本发明在分布式爬虫系统中实现对任务队列在各个分节点的共享,使各个分节点能够实时获取更新后的任务队列,实现读写迅速,避免堵塞,提高爬虫速度的效果。

附图说明

如图1所示为本实施例一的分布式数据采集方法流程图。

如图2所示为本实施例二的分布式数据采集方法流程图。

如图3所示为本实施例二的替代实施例方法流程图。

如图4所示为本实施例三的分布式数据采集方法流程图。

如图5所示为本实施例三的系统模块图。

如图6所示为本实施例三替代实施例的系统模块图。

如图7所示为本实施例四的服务器模块图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。

此外,术语“第一”、“第二”等可在本文中用于描述各种方向、动作、步骤或元件等,但这些方向、动作、步骤或元件不受这些术语限制。这些术语仅用于将第一个方向、动作、步骤或元件与另一个方向、动作、步骤或元件区分。举例来说,在不脱离本申请的范围的情况下,第一特征信息可以为第二特征信息或第三特征信息,类似地,第二特征信息、第三特征信息可以为第一特征信息。第一特征信息和第二特征信息、第三特征信息都是分布式爬虫系统的特征信息,但其不是同一特征信息。术语“第一”、“第二”等而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”、“批量”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

下述实施例中提及的专有名词及英文缩写含义如下:

Docker:一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,能够方便实现分布式爬虫服务的快速部署,docker的可移植性和轻量级的特性,可以根据需要轻松实现扩展或拆除爬虫服务。

Scrapy:一种适用于Python的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测、爬虫服务等。

Scrapy-redis:一种利用redis做的分布式爬虫系统,Redis作为通信载体的优点是读写迅速,对爬虫的速度影响可忽略不计,使用比较普遍。

URL:Uniform Resource Locator统一资源定位符,即网页地址,是互联网上用于描述标准资源的地址。互联网上的每个文件都有一个唯一的URL。

实施例一

本实施例在上述实施例的基础上增加了一种分布式数据采集方法,由分布式爬虫系统的分节点爬虫引擎执行。可选地,常用爬虫框架有Scrapy、Scrapy-redis等,在本实施例及下述实施例中,所述分布式爬虫系统以Scrapy框架为基础进行改进,增加了爬虫服务从共享的任务队列中获取任务参数,然后构建请求、采集数据。

在本实施例及下述实施例中,应用场景为分布式爬虫系统,所述分布式爬虫系统包括有主服务器和各个分节点的节点服务器,每个分节点服务器包括有分节点爬虫引擎。在爬取过程开始之前,在主服务器基于数据采集需求向共享任务队列中添加爬虫任务,分节点服务器从主服务器获取爬虫任务。如图1所示,包括如下步骤:

S101、从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取;

在该步骤中,获取所述共享任务队列包括:在算力足够时,爬虫引擎通过中间插件,在共享任务队列中依次读取所述爬虫任务并执行。可选地,所述共享任务队列通过key-value(关键字-数值)的键值对模式存储所述爬虫任务的任务参数,则该步骤还可以是:基于分节点的数据采集需求确定关键字;基于所述关键词从所述任务队列中获取所述爬虫任务。

在该步骤中,爬虫任务的任务参数可以是完整的url,也可以是主要的请求参数。

在替代实施例中,步骤S101还包括:实时监听所述共享任务队列,以判断所述共享任务队列中是否有所述爬虫任务;若有,则获取所述爬虫任务。

该步骤通过在任务队列中设置实时监听,以及时获取新增的爬虫任务执行。

S102、确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求。

该步骤中,示例性地,所述目标网页链接可以是URL链接。数据获取请求用于向目标网页链接发送数据请求,以获取反馈的数据。

S103、将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

在该步骤中,爬虫引擎还用于通过自定义中间件实时监控共享任务队列,实现从共享任务队列中获取爬虫任务,以保证爬虫服务不会关闭。保证了所述爬虫服务的稳定性。

在该步骤之后,还包括:爬虫引擎向项目管道发起存储请求,所述存储请求中包括所述目标数据,以使项目管道对目标数据进行持久化存储。

S104、向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

所诉分节点服务器的所述共享任务队列从主服务器获取,当主服务器的所述共享任务队列更新时,分节点服务器随之更新。

本实施例在分布式爬虫系统中实现对任务队列在各个分节点的共享,使各个分节点能够实时获取更新后的任务队列,实现读写迅速,避免堵塞,提高爬虫速度的效果。

实施例二

本实施例在上述实施例的基础上增加了对预设IP代理池的设置,由于爬虫过程可能被目标网页的反爬取措施阻拦,导致网站封禁IP或拦截请求,无法采集到目标页面的数据。本实施例通过增加如图2所示,具体步骤如下:

S201、从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取。

S202、确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求。

S2031、从预设的IP代理池中获取一个或多个第一IP。

该步骤中,IP代理池的作用是存储多个可用的代理IP,爬虫引擎使用时再从里面提取,同时,IP代理池中的IP地址由于很快就会失效,为了保证代理IP地址的时效性,所述IP代理池通过动态拨号保证不断生成新IP。

具体地,该代理池包括四个模块,包括:拨号模块,存储模块,检测模块,接口模块。IP代理池创建过程如下:首先将ADSL主机设置为代理主机,每个主机在拨号之前需要将保存在存储模块中的自身代理清除;通过拨号模块进行定时拨号,以提取出新的IP地址;存储模块保存拨号模块提取的IP和端口,采用redis的哈希数据类型保存每个主机对应的IP和端口;检测模块用于检测IP的有效性,当拨号模块获取新的IP后,需先检测IP是否可以访问外网,若访问成功,则获取到的IP即为可用的代理IP。接口模块在IP和端口确定后,提供给爬虫服务调用ip代理池,以使下载器使用该代理ip向目标页面发起请求,提高数据采集的稳定性。

S2032、将所述一个或多个第一IP分配至所述一个或多个下载器。

S2033、将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于所述第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

在替代实施例中,如图3所示,还包括:

S2034、判断所述下载器是否获取到所述目标数据。

S2035、若否,则从所述IP代理池中获取与所述第一IP不同的第二IP。

S2036、将所述第二IP发送至所述下载器,以使所述下载器基于所述第二IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

在该步骤S2034-S2035中,所述下载器根据从代理池中获取到的随机IP向互联网请求进行爬虫任务,若未获取到所述目标数据,则表明该IP被网络防火墙拦截。则从IP代理池获取与第一ip不相同的第二IP,使用第二IP重新执行数据爬取任务。

S204、向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

本实施例在上述实施例的基础上增加了对预设IP代理池的设置,当发起的爬虫请求无法得到预设的返回数据时,从代理池中重新获取新的IP发起请求,以避免被网站防火墙屏蔽,无法获取到预设值。

实施例三

本实施例在上述实施例的基础上增加了对引擎架构的描述,本实施例所述的分布式爬虫系统建立在docker集群上,通过docker架构使爬虫系统在增添爬虫服务和删除爬虫服务时更简便。如图4所示,步骤如下:

S301、从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取。

S302、确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求。

S303、将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

S304、向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

S3051、判断所述目标数据中是否包括新增的所述任务参数。

S3052、若有,则基于所述任务参数生成所述爬虫任务。

S3053、将所述爬虫任务添加至所述共享任务队列。

在本实施例中,所述分布式爬虫系统由docker架构部署。具体地,该步骤包括:对所述爬虫任务配置基础镜像;读取爬虫服务的代码,基于所述基础镜像和代码生成容器;添加所述容器,即可实现爬虫服务的部署和运行。该步骤中,engine、download、pipeline、schedule和/或spiders等模块共同组成了爬虫服务,docker通过基础镜像和爬虫服务构建代码以实现根据需要快速扩展或拆除爬虫服务,其中,爬虫服务包括监听和获取共享任务队列、配置引擎、下载获取数据、数据持久化和/或增加或删除目标任务列表等任务。

本实施例通过docker架构对爬虫任务配置基础镜像,使爬虫系统在快速扩展或拆除爬虫服务时更简便,提高配置效率。

实施例四

如图5,本实施例提供了一种分布式数据采集系统4,包括如下模块:

获取模块401,用于从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取。该模块还用于:实时监听所述共享任务队列,以判断所述共享任务队列中是否有所述爬虫任务;若有,则获取所述爬虫任务。

任务参数确定模块402,用于确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求。

采集模块403,用于将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据。所述采集模块还包括:从预设的IP代理池中获取一个或多个第一IP;将所述一个或多个第一IP分配至所述一个或多个下载器;将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于所述第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

同步更新模块404,用于向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

在替代实施例中,如图6,还包括:

IP切换模块405,用于在所述将所述目标网页链接、数据获取请求和关键请求参数分发至一个或多个下载器,以使每个下载器基于所述第一IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据之后,判断所述下载器是否获取到所述目标数据;若否,则从所述IP代理池中获取与所述第一IP不同的第二IP;将所述第二IP发送至所述下载器,以使所述下载器基于所述第二IP在互联网的目标网页链接发起所述数据获取请求,获取目标数据。

在替代实施例中,还包括:

任务添加模块406,用于在所述将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据之后,判断所述目标数据中是否包括新增的所述任务参数;若有,则基于所述任务参数生成所述爬虫任务;将所述爬虫任务添加至所述共享任务队列。

本发明实施例所提供的一种终端特征采集装置可执行本发明任意实施例所提供的一种分布式数据采集系统,具备功能模块相应的执行方法和有益效果。

实施例五

本实施例提供了一种服务器的结构示意图,如图7所示,该服务器包括处理器501、存储器502、输入装置503和输出装置504;服务器中处理器501的数量可以是一个或多个,图中以一个处理器501为例;设备/终端/服务器中的处理器501、存储器502、输入装置503和输出装置504可以通过总线或其他方式链接,图7中以通过总线链接为例。

存储器502作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于网关的链接生成方法对应的程序指令/模块(例如第一获取模块301,第一配置模块302等)。处理器501通过运行存储在存储器502中的软件程序、指令以及模块,从而执行设备/终端/服务器的各种功能应用以及数据处理,即实现上述的方法。

存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器502可进一步包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络链接至设备/终端/服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置503可用于接收输入的数字或字符信息,以及产生与设备/终端/服务器的用户设置以及功能控制有关的键信号输入。输出装置504可包括显示屏等显示设备。

本发明实施例五通过提供一种服务器,可执行本发明任意实施例所提供的一种分布式数据采集方法,具备执行方法相应的功能模块和有益效果。

实施例六

本发明实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的一种分布式数据采集方法:

从分布式爬虫系统的分节点服务器读取共享任务队列,以获取一个或多个爬虫任务,所述共享任务队列由所述分节点服务器从主服务器获取;

确定所述爬虫任务的任务参数,所述任务参数包括目标网页链接和数据获取请求;

将所述目标网页链接和数据获取请求分发至一个或多个下载器,以使所述下载器在互联网的目标网页链接发起所述数据获取请求,获取目标数据;

向所述分节点服务器返回队列更新信息,以使所述分节点服务器将更新后的所述共享任务队列反馈至主服务器并进行同步更新。

本发明实施例的计算机可读存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电链接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或终端上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—链接到用户计算机,或者,可以链接到外部计算机(例如利用因特网服务提供商来通过因特网链接)。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 一种分布式数据采集方法、系统、服务器和存储介质
  • 一种服务器性能数据采集方法、系统、装置及存储介质
技术分类

06120112186926