[发明专利]一种分布式爬虫系统及周期性增量抓取方法有效
申请号: | 201710372282.1 | 申请日: | 2017-05-24 |
公开(公告)号: | CN107193960B | 公开(公告)日: | 2020-11-10 |
发明(设计)人: | 张雷;韩建军;张文哲;谭龙海;王崇骏 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F16/951 | 分类号: | G06F16/951 |
代理公司: | 南京瑞弘专利商标事务所(普通合伙) 32249 | 代理人: | 陈建和 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 爬虫 系统 周期性 增量 抓取 方法 | ||
1.一种分布式爬虫系统,其特征在于,该系统被配置为基于ZooKeeper的分布式服务、系统组件和数据库三大部分,其中,系统组件包括系统监控组件Monitor、协调组件Coordinator、日志收集组件Logger、基础爬虫组件Spider,数据库包括Redis内存数据库,Redis内存数据库中存放有分布式URL任务队列和分布式BloomFilter;其中,基于ZooKeeper的分布式服务为各系统组件提供分布式协调服务,
所述系统监控组件Monitor负责系统的动态配置和系统的状态监控,
所述协调组件Coordinator负责将种子URL导入到基于Redis的分布式任务队列、周期性汇总各节点状态到ZooKeeper、为日志收集组件Logger动态分配日志源和集群节点的检测与管理中的一种或多种,
所述日志收集组件Logger负责从集群中各基础爬虫组件Spider收集日志数据,所述基础爬虫组件Spider负责处理网页的爬取任务,
所述基于Redis的分布式URL任务队列负责存储所有待爬取的任务URL,
所述基于Redis的分布式BloomFilter负责集群中所有基础爬虫组件Spider的URL去重请求;基于ZooKeeper的分布式服务通过与各系统组件相互协调工作,为各系统组件提供包括动态配置、集群节点检测与管理、Master选举、分布式锁、全局URL的ID生成的分布式服务中的一种或多种。
2.根据权利要求1所述的一种分布式爬虫系统,其特征在于,其中所述系统监控组件Monitor具有Monitor界面,用户可以通过Monitor界面修改存在于ZooKeeper上的系统配置参数,集群中的协调组件Coordinator、日志收集组件Logger和基础爬虫组件Spider会监听ZooKeeper上的相应数据节点,并在数据节点内容被修改后得到相应的通知,进而根据修改后的配置参数做相应调整。
3.根据权利要求2所述的分布式爬虫系统,其特征在于,Monitor界面还能实时显示存在于ZooKeeper上的各系统状态参数和各组件状态参数。
4.根据权利要求1所述的一种分布式爬虫系统,其特征在于,所述基础爬虫组件Spider组件具有多种组件内核,且各组件内核的爬取策略不完全一致。
5.根据权利要求1所述的分布式爬虫系统,其特征在于,所述基础爬虫组件Spider组件具有高扩展性,以方便针对新的数据源编写新的组件内核。
6.根据权利要求1所述的分布式爬虫系统,其特征在于,所述分布式URL任务队列的任务分发方式采用基础爬虫组件Spider的拉取方式。
7.根据权利要求1所述的分布式爬虫系统,其特征在于,所述分布式BloomFilter采用分段机制将bit向量分段存储在Redis不同的Key之上,并通过分段乐观锁实现各基础爬虫组件Spider访问的同步性控制。
8.一种周期性增量抓取方法,其特征在于,基于权利要求1至7任意一项所述分布式爬虫系统,包括:协调组件Coordinator周期性导入任务到分布式URL任务队列,并唤醒正在休眠的Spider组件;Spider组件根据当前分布式URL任务队列的执行情况进行休眠或周期性增量抓取,在没有抓取任务时,Spider组件就会进入休眠状态,休眠的Spider组件会被其他基础爬虫组件Spider组件或Coordinator组件唤醒时会继续进行抓取任务。
9.根据权利要求8所述的周期性增量抓取方法,其特征在于,包括如下步骤:
S1、协调组件Coordinator周期性导入任务到分布式URL任务队列,并唤醒正在休眠的Spider组件;
S2、判断是否结束系统周期性增量抓取,若为是,跳转S6,否则,执行S3;
S3、判断当前分布式任务队列是否为空,若为是,执行S4,否则,跳转S5;
S4、进入基础爬虫组件(Spider)休眠阶段,包括如下步骤:a)判断当前Spider组件除当前抓取线程外,其它抓取线程是否均已阻塞,若是,则执行步骤b),否则,执行步骤c);b)在ZooKeeper中创建休眠标示节点,该节点可以用来表示当前Spider组件已经休眠,当其他组件需要唤醒该Spider组件时只需删除该数据节点即可;c)阻塞该抓取线程;d)抓取线程已经阻塞,等待其他线程唤醒;e)抓取线程被其它线程唤醒,并执行S2;
S5、进入基础爬虫组件Spider抓取阶段,包括:a)从分布式URL队列获取抓取任务;b)根据获取的任务,抓取相应网页并存储结果;c)分析抓取到的网页超链接并获取新的任务集合;d)将获取到的新任务发送到分布式BloomFilter去重;e)将去重后的新任务添加到分布式任务队列;f)判断当前Spider组件是否有抓取线程阻塞,若有,则执行步骤g),否则,执行步骤h);g)唤醒当前Spider组件中阻塞的抓取线程;h)判断当前集群中是否有其他的Spider组件休眠,若有,则唤醒相应休眠Spider,否则,执行S2;
S6、结束。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710372282.1/1.html,转载请声明来源钻瓜专利网。