基于计算资源的分布式爬虫调度系统及方法

文档序号:1921685 发布日期:2021-12-03 浏览:7次 >En<

阅读说明:本技术 基于计算资源的分布式爬虫调度系统及方法 (Distributed crawler scheduling system and method based on computing resources ) 是由 肖曦 唐新怀 于 2020-05-28 设计创作,主要内容包括:一种基于计算资源的分布式爬虫调度系统及方法,通过客户端获取用户定义的爬虫方案以生成导航页爬虫种子并存储在Redis数据库中;爬虫生产者节点集群中的各节点计算自身资源获取导航页爬虫种子,并将所生成的内容页爬虫种子存储在客户端的Redis数据库中;爬虫消费者节点集群中的各个节点计算自身资源获取内容页爬虫种子,操作内容页爬虫种子采集目标数据。本发明可针对特定事件进行数据采集;基于Redis数据库进行爬虫调度,提升调度速度并保证了数据一致性;根据爬虫节点资源执行爬虫种子,充分发挥节点性能,使爬虫系统高效、易拓展。(A distributed crawler scheduling system and method based on computing resources, a user-defined crawler scheme is obtained through a client to generate a navigation page crawler seed and the navigation page crawler seed is stored in a Redis database; each node in the crawler producer node cluster calculates own resources to obtain a navigation page crawler seed, and stores the generated content page crawler seed in a Redis database of the client; each node in the crawler consumer node cluster calculates self resources to obtain content page crawler seeds, and the content page crawler seeds are operated to collect target data. The invention can collect data aiming at specific events; crawler scheduling is performed based on a Redis database, so that scheduling speed is increased and data consistency is guaranteed; and crawler seeds are executed according to crawler node resources, so that the node performance is fully exerted, and the crawler system is efficient and easy to expand.)

基于计算资源的分布式爬虫调度系统及方法

技术领域

本发明涉及的是一种信息采集领域的技术,具体是一种基于计算资源的分布式爬虫调度系统及方法。

背景技术

随着互联网的迅速发展,网络成为大量信息的载体,如何快速有效地针对某一特定事件进行信息采集成为一个巨大的挑战。现有的网络爬虫技术常常通过单个关键词对网络数据进行采集,为用户提供粗粒度的信息,这种方式只能够解决用户的部分需求。当用户关注某一特定事件时,这些网络爬虫技术往往无法根据用户提出的特定事件精确地采集网络数据。同时,单机网络爬虫技术受到自身性能限制,无法快速地获取网络数据和对海量的网络数据进行分析处理。如何通过计算资源进行分布式爬虫调度,充分利用各节点计算资源实现对舆情数据进行快速采集成为另一个亟待解决的问题。

发明内容

本发明针对现有技术存在的上述不足,提出一种基于计算资源的分布式爬虫调度系统及方法,根据用户定义的爬虫方案,可针对特定事件进行数据采集;基于Redis数据库进行爬虫调度,提升调度速度并保证了数据一致性;根据爬虫节点资源执行爬虫种子,充分发挥节点性能,使爬虫系统高效、易拓展。

本发明是通过以下技术方案实现的:

本发明涉及一种基于计算资源的分布式爬虫调度方法,通过客户端获取用户定义的爬虫方案以生成导航页爬虫种子并存储在Redis数据库中;爬虫生产者节点集群中的各节点计算自身资源获取导航页爬虫种子,并将所生成的内容页爬虫种子存储在客户端的Redis数据库中;爬虫消费者节点集群中的各个节点计算自身资源获取内容页爬虫种子,操作内容页爬虫种子采集目标数据。

所述的导航页爬虫种子是指:由待爬取的关键词、指定网站导航页面的URL及相关参数等组成的待处理的爬虫任务。导航页爬虫种子对应导航页面常常存在多条搜索内容及其链接,单条搜索内容仅包含完整内容的一部分。

所述的内容页爬虫种子是指:由导航页面中多条搜索内容的对应链接、链接来源等组成的待处理的爬虫任务。内容页中常常包含文本、图片、视频等爬虫需要采集的数据内容。

所述的客户端用于生成爬虫方案,将导航页爬虫种子发送给Redis数据库供爬虫生产者节点使用,包括:Redis数据库和生成爬虫方案的网站或应用。

所述的用户定义的爬虫方案,通过以下方式得到:客户端获取用户自定义的爬虫方案;获取爬虫方案中指定的地域关键词、人物关键词、事件关键词以及关键词间的逻辑关系;根据爬虫方案指明的逻辑关系生成备选网络爬虫关键词,即根据爬虫方案中的逻辑关系,从地域关键词、人物关键词和事件关键词中分别选择并生成多个关于人物、地域和/或事件的组合关键词。

所述的导航页爬虫种子,通过以下方式生成:根据所有备选的组合关键词结合目标网络平台的URL和查询参数生成导航页爬虫种子,导航页爬虫种子经过提取获得内容页爬虫种子。

所述的网络平台包括但不限于新浪微博、知乎、论坛、推特、百度等。

所述的提取是指:访问导航页爬虫种子所对应的导航页面,分析导航页面的HTML结构对导航页面中所包含的搜索内容链接进行提取,同时添加内容链接来源等信息。

所述的存储,优选将所有导航页爬虫种子和/或内容页爬虫种子以有序集合的形式存储在Redis数据库中,以时间戳作为有序集合中导航页爬虫种子和/或内容页爬虫种子的分值。

所述的爬虫生产者节点集群是指:用于处理导航页爬虫种子的服务器集群。

所述的内容页爬虫种子,通过以下方式生成:爬虫生产者节点集群当前节点i计算当前能继续获取的导航页爬虫种子数目其中:爬虫生产者节点集群当前节点i已用的内存资源百分比mi和CPU资源百分比ci,爬虫节点i初始化设置的内存资源百分比阈值ML和CPU资源百分比阀值CL,当前节点i正处理的导航页爬虫种子数目Wi、当前节点爬虫占用的内存资源百分比Mi和CPU百分比Ci;爬虫节点i根据当前能继续获取的导航页爬虫种子数目去获取Ni个导航页爬虫种子,利用Redis分布式锁避免重复获取的问题;当当前节点无爬虫任务执行,先获取初始化值n个导航页爬虫种子进行操作,下一步通过计算Ni来获取指定数目的导航页爬虫种子;各爬虫节点采集已获取导航页爬虫种子内容,解析导航页中存在的多个内容页爬虫种子,去除Redis数据库中已存在的内容页爬虫种子。

所述的解析是指:分析导航页面的HTML结构、Ajax动态加载内容。

所述的爬虫消费者节点集群是指:用于处理内容页爬虫种子的服务器集群。

所述的目标数据,通过以下方式得到:爬虫消费者节点集群中的当前节点j计算当前能继续获取的导航页爬虫种子数目其中:当前节点j已用的内存资源百分比mj和CPU资源百分比cj,当前节点j初始化设置的内存资源百分比阈值ML和CPU资源百分比阀值CL,当前节点j正处理的导航页爬虫种子数目Wj、当前节点爬虫占用的内存资源百分比Mj和CPU百分比Cj,当前节点j根据当前能继续获取的内容页爬虫种子数目去获取Nj个内容页爬虫种子,利用Redis分布式锁避免重复获取的问题;当当前节点无爬虫任务执行,先获取初始化值n个导航页爬虫种子进行操作,下一步通过计算Nj来获取指定数目的内容页爬虫种子;各爬虫节点采集已获取内容页爬虫种子,将采集的目标数据传输给Kafka集群进行后续的对应操作。

本发明涉及一种实现上述方法的系统,包括:分别与Redis数据库相连的客户端、爬虫生产者节点集群、爬虫消费者节点集群以及Kafka中间节点,其中:客户端生成爬虫方案并将导航页爬虫种子发送给Redis数据库,爬虫生产者节点集群通过计算当前可用资源从客户端中的Redis数据库中获取导航页爬虫种子,执行导航页爬虫种子生成内容页爬虫种子,将生成的内容页爬虫种子存储在Redis数据库中,爬虫消费者节点通过计算当前可用资源从Redis数据库中获取内容页爬虫种子,执行导航页爬虫种子生成内容页爬虫种子,将生成的网络数据发送给Kafka分布式消费系统的中间节点,Kafka中间节点缓存爬虫消费者节点传输的网络数据,等待Kafka消费者节点获取数据进行消费。

所述的Kafka分布式消费系统由Linkedin公司开发,是一个分布式、支持分区、多副本且基于zookeeper协调的分布式消息系统,包括Kafka生产者节点、中间节点和消费者节点,其中:Kafka中间节点用于中转数据传输的一个Broker,用于记录保存数据以及数据的消费状态;Kafka消费者节点是指:处理发送到当前服务器的数据引擎。

技术效果

本发明整体解决了针对特定事件的数据采集任务调度难题以及当前计算资源进行爬虫调度的难题。

与现有技术相比,本发明通过多类关键词的组合方式在一定程度上保证了对特定事件的数据采集,保证目的数据与特定事件的关联性,根据用户需求提供更为细粒度的数据采集方法。本发明利用Redis数据库解决了爬虫种子的重复执行问题;各爬虫节点根据本身资源执行爬虫任务,充分发挥各节点的性能;同时利用Redis的分布式锁避免了多节点间数据一致性的问题。通过本方法避免爬虫资源的无端浪费;提高数据采集速度。本发明结合数据采集中往往存在导航页和内容页的特性,通过分离导航页和内容页的爬虫任务,降低了爬虫系统的耦合性,使得爬虫系统易于管理。

附图说明

图1为实施例分布式爬虫的调度方法流程图;

图2为实施例分布式爬虫调度系统结构图;

图3为实施例爬虫生产者节点集群的实现流程图;

图4为实施例爬虫消费者节点集群的实现流程图。

具体实施方式

本实施例的应用场景主要针对网络舆情数据采集,结合网络舆情采集存在导航页和内容页的特性,根据用户定义的舆情爬虫方案,针对特定舆情事件进行数据采集;基于Redis数据库进行爬虫调度,提升调度速度并保证了数据一致性;根据分布式爬虫节点资源执行爬虫种子,充分发挥各节点性能,使爬虫系统更高效、易拓展。

本实施例根据舆情爬虫方案指明的关键词与或关系生成备选网络舆情事件关键词,包括:根据舆情爬虫方案中的关键词与或关系,从地域关键词、人物关键词和事件关键词中分别选择关键词,生成多个关于人物、地域和/或事件的舆情组合关键词。

本实施例主要是针对特定事件的一系列关键词,关键词间存在与或关系。每一类关键词包括必选关键词和可选关键词,必选关键词会出现在每一个人物、地域和/或事件的舆情组合关键词中,而可选关键词通过组合方式出现在部分舆情组合关键词中,从而生成多个备选网络舆情事件关键词。

如图1所示,为本实施例涉及一种舆情领域基于计算资源的分布式爬虫的调度方法,包括如下步骤:

S101,获取用户定义的舆情爬虫方案,具体包括:

i)获取用户自定义的舆情爬虫方案;

ii)获取舆情爬虫方案中指定的地域关键词、人物关键词和事件关键词和关键词间的与或关系;

iii)根据舆情爬虫方案指明的关键词的与或关系生成备选网络舆情爬虫关键词。

S102,客户端根据用户定义的舆情爬虫方案生成导航页爬虫种子存储在Redis数据库中;

如图2所示,为本实施例涉及的一种分布式爬虫调度系统,包括:分别与Redis数据库相连的客户端、爬虫生产者节点集群、爬虫消费者节点集群以及Kafka中间节点,其中:客户端与Redis数据库相连接进行爬虫方案的传输;爬虫生产者集群向Redis获取导航页爬虫种子和发送内容页爬虫种子;爬虫消费者集群向Redis获取内容页爬虫种子,并向Kafka中间节点发送采集到的舆情数据;Kafka消费者集群主动向Kafka中间节点获取采集的舆情数据。

客户端根据所有备选的舆情组合关键词结合新浪微博、知乎、论坛、推特等网络舆情平台URL和查询参数生成导航页爬虫种子,导航页爬虫种子经过处理后往往能获得一定量的内容页爬虫种子;

根据导航页爬虫种子的创建时间生成时间戳,将所有导航页爬虫种子以有序集合的形式存储在Redis数据库中,以时间戳作为有序集合中内容页爬虫种子的分值。

本实施例中,由于存在多个如新浪微博、知乎、论坛、推特等网络舆情平台的URL,而查询参数往往为关键词、查询范围(查询页码、每页查询内容条数)、查询结果排序方式组成。通过组合关键词、平台URL、查询范围和生成时间戳可以生成多个导航页爬虫种子,最终生成的导航页爬虫种子表示为

{[taskURL1,timestamp1],[taskURL2,timestamp2],…,[taskURLn,timestampn]},由客户端将导航页爬虫种子存储以有序集合的方式存储到Redis数据库中,接下来的生产者节点集群主要是通过从Redis数据库中获取导航页爬虫种子完成调度。

S103,如图3所示,爬虫生产者节点集群根据自身资源获取导航页爬虫种子,操作导航页爬虫种子生成内容页爬虫种子并存储在Redis数据库中,具体为:爬虫生产者节点集群各节点根据自身资源获取导航页爬虫种子,操作导航页爬虫种子生成内容页爬虫种子并存储在Redis数据库中:由爬虫生产者节点集群当前节点i计算当前能继续获取的导航页爬虫种子数目Ni,利用当前节点的调度器向Redis数据库中获取Ni个爬虫种子,最终采集导航页爬虫种子的内容页爬虫种子,传输给Redis数据库。

所述的爬虫生产者节点集群中的当前节点i包括调度器和数据采集器,其中:调度器初始化内存资源百分比阈值ML、CPU资源百分比阀值CL和初始爬虫执行数目n。判断当前节点是否有剩余资源,Redis中是否有需要等待执行的导航页爬虫种子,当其中一项不满足时,调度器停止调度,休眠一分钟后重新判断当前节点是否当前需要进行调度导航页爬虫种子。若调度器需要对资源进行调度计算当前节点i已用内存资源百分比mi和CPU资源百分比ci;判断当前节点i正处理的导航页爬虫种子数目Wi、当前节点爬虫占用的内存资源百分比Mi和CPU百分比Ci;计算当前能继续获取的导航页爬虫种子数目当当前节点无爬虫任务执行,先获取初始化值n个导航页爬虫种子进行操作,爬虫节点i根据当前能继续获取的导航页爬虫种子数目去获取Ni个导航页爬虫种子,利用Redis分布式锁避免重复获取的问题;

本实施例中,利用Redis分布式锁去获取爬虫种子,根据爬虫种子时间戳从小到大,获取爬虫种子,每一次利用Redis的SETNX获取锁去获取Ni个导航页爬虫种子,获取完导航页爬虫种子释放锁。当无法获取锁时,进行等待直到成功获取导航页爬虫种子。如此设置,能够避免数据一致性问题,同时减少了爬虫资源的浪费。

所述的爬虫生产者节点集群中的各节点采集已获取导航页爬虫种子内容,解析导航页中存在的多个内容页爬虫种子,去除Redis数据库中已存在的内容页爬虫种子,并将去重后的内容页爬虫种子放到Redis数据库中供爬虫消费者节点集群使用,在Redis数据库中以时间戳作为有序集合的分值方式进行存储。

所述的Redis数据库中关于内容页的有序集合包括准备、执行中和已完成,即ready、execute和finish集合:当生产者爬虫节点采集完内容页爬虫种子时,从finish集合和execute集合查询是否存在已完成的内容页爬虫种子,当存在则删除这些重复的爬虫种子。将剩余的内容页爬虫种子以<内容页URL、抓取时间戳、内容来源平台>的方式发送给Redis数据库的ready集合,用于爬虫消费者节点集群的处理。通过Redis对重复的内容页爬虫种子进过滤,节省了爬虫资源和利用Redis对爬虫种子进行访问和存储加快了爬虫调度。

S104,如图4所示,爬虫消费者节点集群根据自身资源获取内容页爬虫种子,针对内容页爬虫种子对相应内容页数据进行HTML、Ajax解析,对文本、视频、图片内容进行采集,并对采集的内容页数据进行清理、发送给Kafka中间节点用于后续操作。

本实施例中,爬虫消费者节点集群当前节点j计算当前能继续获取的导航页爬虫种子数目Nj,利用当前节点的调度器向Redis数据库中获取Nj个爬虫任务,各爬虫节点处理已获取的内容页爬虫种子,将采集的舆情数据传输给Kafka集群进行后续操作。

所述的爬虫消费者节点集群包括:调度器和数据采集器,其中:调度器初始化内存资源百分比阈值ML、CPU资源百分比阀值CL和初始爬虫执行数目n。判断当前节点是否有剩余资源,Redis的Ready集合中是否有需要等待执行的内容页爬虫种子,当其中一项不满足时,调度器停止调度,休眠一分钟后重新判断当前节点是否当前需要进行调度内容页爬虫种子。若调度器需要对资源进行调度计算当前节点j已用内存资源百分比mj和CPU资源百分比cj;判断当前节点j正处理的导航页爬虫种子数目Wj、当前节点爬虫占用的内存资源百分比Mj和CPU百分比Cj;计算当前能继续获取的导航页爬虫种子数目当当前节点无爬虫任务执行,先获取初始化值n个内容页爬虫种子进行操作,爬虫节点j根据当前能继续获取的导航页爬虫种子数目去获取Nj个内容页爬虫种子,利用Redis分布式锁避免重复获取的问题。

本实施例中,利用Redis分布式锁去获取爬虫种子,根据爬虫种子时间戳从小到大,从ready集合获取爬虫种子,同时检测execute集合中是否存在上个爬虫周期存在的中断的内容页爬虫种子,将其添加到ready集合中,每一次利用Redis的SETNX获取锁去获取Nj个内容页爬虫种子,获取完内容页爬虫种子释放锁。当无法获取锁时,进行等待直到成功获取内容页爬虫种子。如此设置,能够避免数据一致性问题,同时减少了爬虫资源的浪费。

具体的,采集的舆情数据以topic方式传输给Kafka集群进行后续操作,在本实施例中topic包括新浪微博、知乎、论坛、推特等,各爬虫节点数据采集器采集的舆情数据根据其来源按照topic分发给Kafka中间节点,Kafka消费者节点集群从Kafka集群中获取采集的舆情数据进行处理。如此设置降低了爬虫系统的耦合性,增加分布式爬虫调度系统的稳定性。采集到的舆情数据内容常见结构,如下所示:

struct message{#内容结构体

1.required id#随机生成的唯一id

2.content#采集的舆情数据内容

3.resource#采集的舆情数据平台来源

4.url#采集的内容页种子URL

5.time#采集该舆情数据的时间

}

经过具体实际实验,以百度网站作为目标网站,客户端部署在1台CPU 4核内存32GB的Centos 7.2 64位操作系统机器中;爬虫生产者集群部署在1台CPU 24核内存32GB的Centos 7.2 64位操作系统机器;爬虫消费者集群部署在3台CPU 24核内存32GB的Centos7.2 64位操作系统机器的具体环境设置下,以初始爬虫任务数5个和资源阈值90%运行上述方法,能够得到的实验数据是:3台爬虫消费者集群3小时共采集200多万个页面,平均采集速率为13353页/min,每台机器的平均采集速率在4451页/min。

与现有技术相比,本发明通过用户定义的爬虫方案生成组合关键词进行爬虫种子生成;通过Redis数据库进行爬虫生产者集群与爬虫消费者集群间的爬虫种子调度;通过计算资源情况,集群内的各节点向Redis数据库进行爬虫种子获取,利用分布式锁避免重复爬虫种子的获取。与未基于计算资源的爬虫调度方案相比,本方法拥有更快的平均采集速率、更稳定灵活。

上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于浏览器的数据获取方法、装置和系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!