一种分布式爬虫系统及其实现方法

文档序号:10655443阅读:506来源:国知局
一种分布式爬虫系统及其实现方法
【专利摘要】本发明公开了一种分布式爬虫系统,该系统包括页面采集模块、目标url采集模块、调度监控模块和存储目标url队列模块。该系统通过增加了一个调度节点,把爬取逻辑和监控逻辑分离,并对全局调控,一旦发现主爬虫节点出现异常,马上分配另一新节点取代为主节点。另外,本发明把缓存目标url队列改为持久化存储目标url队列,同时增加一个已处理url队列,对于所有的爬取需求,url统一存放。此外,本发明还提供了一种分布式爬虫系统的实现方法。通过本发明能够适时地调控,增强系统的健壮性,同时也节省资源,增强爬虫的效率。
【专利说明】
一种分布式爬虫系统及其实现方法
技术领域
[0001]本发明涉及网络信息采集领域,尤其涉及一种分布式爬虫系统及其实现方法。【背景技术】
[0002]随身社交媒体的发展,互联网上的信息越来越庞大。对于近期发生的一个热点问题,往往只需打开网络搜索一下就有一个大概的了解。但互联网上更多的是一些杂乱无章的无用信息,如果只要了解一下时事,确实只需要通过搜索引擎就可以了。那么如果需要了解一个热点问题的发生、经过、结果,就需要专业的信息采集手段了。
[0003]互联网爬虫就是信息采集手段的一种。网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。互联网上的爬虫应用分两种:
[0004]—种像百度、谷歌、搜狗这类的搜索引擎,这一类的爬虫称为通用爬虫,它追求的是尽可能大的网络覆盖率,但往往会返回大量的用户并不关心的网页。而且大部分的通用爬虫基于关键字匹配,很难扩展成支持语义的查询。
[0005]与通用爬虫相反的是聚焦爬虫,聚焦爬虫指的是具有某种具体目标网站的定向爬虫。这一类的爬虫只对符合特定规则的网页感兴趣,返回的结果必定是用户关心的结果。怎么增加覆盖率和增加爬取效率是这类爬虫所要考虑的问题。而且多个不同类型的定向爬虫并行产生的资源重用等问题也是迫切需要解决的。例如两个不同的类型的爬虫刚好指向采集同一个网页,这样会对该网页进行两次处理,而比较好的方式是只处理该网页一次,然后指向该网页的爬虫都从第一次处理的结果中获取信息。
[0006]如图1所示,展示了基于scrapy、redis、mongodb分布式网络爬虫框架,主爬虫负责根据规则采集符合目标的url进入redies队列,通过redies与页面采集节点通信,页面采集节点从redies里获取目标url,然后进行信息采集,采集到的信息存储在mongodb集群中。使用redis数据库来替换scrapy原本使用的队列结构(deque),redis中存储了工程的 request,stats信息,能够对各个机器上的爬虫实现集中管理,这样解决爬虫的性能瓶颈, 利用redis的高效和易于扩展能够轻松实现高效率下载,当redis存储或者访问速度遇到瓶颈时,可以通过增大redis集群数和爬虫集群数量改善。
[0007]尽管上述方法采用了分布式的策略对爬虫的性能有很大的提升,但是还是存在一些问题:
[0008] 1、主爬虫既要爬取url又要负责调控各个分机节点的页面采集工作,一旦主爬虫出现异常整个系统奔溃。[〇〇〇9] 2、该分布式策略只针对单个目标网站的爬取,对于任务目标覆盖多个网站的场景,会对某些url进行多次重复爬取,造成严重的资源浪费。另外,该策略每次进行爬取前必须清掉redies数据,并没有增量爬取的方案。
【发明内容】

[0010]本发明的目的是为了克服现有技术的缺陷,提供一种分布式爬虫系统及其实现方法,从而能够适时地调控,增强系统的健壮性,同时也节省资源,增强爬虫的效率。
[0011]为实现上述目的,本发明提供了一种分布式爬虫系统,所述系统包括:
[0012]页面采集模块、目标url采集模块、调度监控模块和存储目标url队列模块。[〇〇13]页面采集模块,其通过从目标url队列提取信息,提取成功后目标url插入已处理 ur 1队列,采集到的信息存储至Ijmongodb集群。[〇〇14]目标url采集模块,通过主爬虫获取符合已定义规则的url,并把该url压入目标 url队列。[〇〇15]调度监控模块,贯穿整个系统,与每个模块都直接联系,并监控爬虫状态信息和集群状态信息。
[0016]存储目标url队列模块,包括两个队列:目标url队列和已处理url队列。
[0017]进一步地,所述调度监控模块中的调度节点,把爬取逻辑和监控逻辑分离,并对全局调控,一定发现主爬虫节点出现异常,马上分配另一新节点取代为主节点。
[0018]进一步地,调度监控模块会自动监控系统状态信息,其中爬虫状态信息包括开始、 结束、异常,集群状态信息包括是否空闲、是否异常。
[0019]此外,本发明还提供了一种分布式爬虫系统的实现方法,该方法的流程为:
[0020]系统接受爬取请求信号,调度监控模块根据请求分配机器处理爬取url或采集页面逻辑。[0021 ]如果是爬取url请求,目标url采集模块获取启动信号,调度监控模块分配主爬虫节点,执行目标url采集模块的采集url逻辑,采集符合请求规则的url压入存储目标url队列模块中的目标url队列,直到所有符合要求的url都缓存进目标url队列或者接受终止信号时停止执行。
[0022]如果是采集页面请求,页面采集模块获取启动信号,调度监控模块分配要素爬虫采集节点,从存储目标url队列模块中缓存的目标url队列获取需要采集的url,根据url请求页面,页面采集模块对页面的信息进行结构化清洗,采集结果存储在mongodb集群中,该 url从存储url模块的目标url队列中删除,并压入存储url模块的已处理url队列中,重复此操作直至存储url模块的目标url队列为空或者接受终止信号。
[0023]本发明技术方案带来的有益效果:
[0024]1、本发明通过增加一个统一的调度节点,把爬取逻辑和控制逻辑分开,对于主爬虫异常的场景,调度节点的监控器能获得该信号,从而从空闲的节点中分配出替代主爬虫的程序空间,同理,对于采集页面爬虫异常的节点,也能适时地调控,增强系统的健壮性。
[0025]2、此外,本发明把缓存目标url队列改为持久化存储目标url队列,同时增加一个已处理url队列,对于所有的爬取需求,url统一存放。这样,当场景需要暂停爬取时,系统会记录当前的目标url队列和已处理url队列,从而实现继续开始后的增量爬取。另外,由于已处理url队列的存在,对于各种任务重叠的url也会同时去重,节省资源的同时,也增强爬虫的效率。【附图说明】
[0026]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0027] 图1是现有技术中基于scrapy、redis、mongodb的分布式爬虫框架图;
[0028]图2是本发明的分布式爬虫系统框架图;[〇〇29]图3是本发明的目标url采集模块流程图;
[0030]图4是本发明的页面采集模块流程图;
[0031]图5是本发明的调度监控模块架构图。【具体实施方式】[〇〇32]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033]本发明关注的是对于某个热点问题,如何比较准确的追溯它的发展,通用爬虫和聚焦爬虫相比,明显聚焦爬虫比较符合本发明的需求。但是普通的聚焦爬虫只会抓取特定的单个网站,这与本发明想监控整个互联网的想法又存在矛盾。因此本发明在单任务的聚集爬虫模式基础上,提出一个多任务的爬虫框架,通过统一的任务调度,把采集和控制分离,从而更加高效、稳定。
[0034]如图2所示为本发明改进后的分布式爬虫系统,该系统包括页面采集模块、目标 url采集模块、调度监控模块和存储目标url队列模块。该系统通过增加了一个调度节点,把爬取逻辑和监控逻辑分离,并对全局调控,一旦发现主爬虫节点出现异常,马上分配另一新节点取代为主节点。另外增加存储目标url队列模块,该模块包括两个队列:目标url队列和已处理url队列。
[0035]如图3所示为本发明中的目标url采集模块流程图:
[0036] 1、调度节点捕获开始信号,分配机器启动主爬虫引擎。[〇〇37] 2、主爬虫从互联网上获取一个符合已定义规则的url。[〇〇38] 3、根据缓存的已处理url队列,判断该url是否已经处理,是,则丢弃该url;反之, 该url压入目标url队列。[〇〇39] 4、重复步骤2和3、步直到定义的范围内没有适合的url或者受到终止信号。[〇〇4〇]如图4所示为本发明中的页面采集模块流程图:
[0041] 1、调度器接收到页面采集信号,分配机器启动页面采集爬虫。
[0042] 2、页面采集爬虫从目标url队列中获取url,然后提取信息。如提取成功,则该url 从目标url队列中推出,并插入已处理url队列,采集到的信息存储到mongodb集群;如提取失败,则发送错误日志。[〇〇43] 3、重复步骤2、直到目标url队列数据量为0或者收到停止信号。
[0044]如图5所示为本发明中的调度监控模块架构图,调度监控模块会自动监控系统状态信息,其中主要监控两类信息:爬虫状态信息和集群状态信息。爬虫状态信息包括开始、 结束、异常等,集群状态信息包括是否空闲、是否异常等。调度监控模块贯穿整个系统,与每个模块都直接联系。
[0045]本发明通过增加一个统一的调度节点,并把缓存目标url队列改为持久化存储目标url队列,从而能够适时地调控,增强系统的健壮性,同时也节省资源,增强爬虫的效率。
[0046]以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想; 同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【主权项】
1.一种分布式爬虫系统,其特征在于,所述系统包括:页面采集模块、目标url采集模块、调度监控模块和存储目标url队列模块;页面采集模块,其通过从目标url队列提取信息,提取成功后目标url插入已处理url队 列,采集到的信息存储到mongodb集群;目标url采集模块,通过主爬虫获取符合已定义规则的url,并把该url压入目标url队 列;调度监控模块,贯穿整个系统,与每个模块都直接联系,并监控爬虫状态信息和集群状 态fg息;存储目标ur 1队列模块,包括两个队列:目标ur 1队列和已处理ur 1队列。2.根据权利要求1所述的系统,其特征在于,所述调度监控模块中的调度节点,把爬取 逻辑和监控逻辑分离,并对全局调控,一定发现主爬虫节点出现异常,马上分配另一新节点 取代为主节点。3.根据权利要求1所述的系统,其特征在于,调度监控模块会自动监控系统状态信息, 其中爬虫状态信息包括开始、结束、异常,集群状态信息包括是否空闲、是否异常。4.一种分布式爬虫系统的实现方法,其特征在于,该方法的流程为:系统接受爬取请求信号,调度监控模块根据请求分配机器处理爬取url或采集页面逻 辑;如果是爬取url请求,目标url采集模块获取启动信号,调度监控模块分配主爬虫节点, 执行目标url采集模块的采集url逻辑,采集符合请求规则的url压入存储目标url队列模块 中的目标url队列,直到所有符合要求的url都缓存进目标url队列或者接受终止信号时停 止执行;如果是采集页面请求,页面采集模块获取启动信号,调度监控模块分配要素爬虫采集 节点,从存储目标url队列模块中缓存的目标url队列获取需要采集的url,根据url请求页 面,页面采集模块对页面的信息进行结构化清洗,采集结果存储在mongodb集群中,该url从 存储url模块的目标url队列中删除,并压入存储url模块的已处理url队列中,重复此操作 直至存储url模块的目标url队列为空或者接受终止信号。
【文档编号】G06F17/30GK106021608SQ201610466951
【公开日】2016年10月12日
【申请日】2016年6月22日
【发明人】余虎, 潘嘉朋, 张郭强, 徐少强
【申请人】广东亿迅科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1