分布式爬虫的集中管理系统的制作方法

文档序号:24065874发布日期:2021-02-26 13:00阅读:56来源:国知局
分布式爬虫的集中管理系统的制作方法

[0001]
本发明涉及互联网技术领域,尤其涉及一种分布式爬虫的集中管理系统。


背景技术:

[0002]
随着现代科技的飞速发展,信息化、数字化时代的展开,互联网俨然成为了当今社会信息的最大载体。为了能够在浩瀚的信息海洋中精确地查找出用户所需要的信息,搜索引擎技术应运而生,而作为这一技术的重要组成部分——网络爬虫,它直接影响了搜索引擎的质量、大数据分析的准确性、模型培养的完善等相关需要数据基础的工作的完成效果。因此保证爬虫的高效性、准确性、速度以及如何管理多个爬虫任务等方面是目前爬虫的技术要点。
[0003]
目前,爬虫任务的数量较多,如果通过人工进行管理,不仅会浪费大量的人力资源,而且无法做到集中精准,因此目前对爬虫任务的管理还需完善。


技术实现要素:

[0004]
基于此,有必要针对上述问题,提出了一种分布式爬虫的集中管理系统,用于实现对分布式爬虫任务的集中管理。
[0005]
在第一方面,本发明实施例提供一种分布式爬虫的集中管理系统,所述集中管理系统包括主机服务器和与所述主机服务器通信的多台从机服务器,所述主机服务器和所述从机服务器使用scrapy框架进行布局,且所述scrapy框架使用redis 队列进行统一资源定位符url的管理;
[0006]
其中,所述scrapy框架包含引擎、调度器、下载器、爬虫、管道以及中间件;
[0007]
所述redis队列、所述调度器、所述引擎及所述管道布局在所述主机服务器,所述下载器、所述爬虫及所述中间件布局在所述从机服务器上;
[0008]
所述从机服务器用于向所述主机服务器发送request;
[0009]
所述主机服务器用于基于所述request分配对应的url,并向所述从机服务器反馈包含所述url的request;
[0010]
所述从机服务器还用于根据所述包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中。
[0011]
可选的,所述scrapy框架与django对接。
[0012]
可选的,所述主机服务器中设置有爬虫,所述主机服务器调用所述爬虫从网络获取url,并进行去重处理,将去重之后的url按照优先级添加至所述redis 队列。
[0013]
可选的,所述从机服务器还用于根据所述包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中,包括:
[0014]
所述从机服务器具体用于从所述包含url的request中提取url,并由所述下载器下载所述url对应的页面,通过所述爬虫按照预设的匹配规则对所述页面进行解析及数据提取,并将提取的数据发送给所述主机服务器中的管道,所述管道则用于将所述提取的数
据存储至所述预设的数据库中。
[0015]
可选的,所述从机服务器采用多线程的方式对所述页面进行解析及数据提取。
[0016]
可选的,所述多线程的数量由concurrent_requests模块确定。
[0017]
可选的,所述从机服务器中的爬虫继承爬虫功能及redismixin,所述 redismixin用于从所述包含url的request中提取url。
[0018]
可选的,继承所述爬虫功能时,调用steupsetup_redis函数,所述setup_redis 函数用于连接redis队列。
[0019]
可选的,当所述从机服务器中的爬虫处于空闲状态时,调用spider_idle函数,所述spider_idle函数用于调用schedule_next_request函数,以使得所述爬虫处于活着状态,且抛出dontclosespider异常。
[0020]
可选的,当所述从机服务器中的爬虫解析到数据时,调用item_scraped函数,所述item_scraped函数用于调用schedule_next_request函数,获取下一个request。
[0021]
采用本发明实施例,具有如下有益效果:
[0022]
本发明实施例公开了一种分布式爬虫的集中管理系统,其中集中管理系统包括主机服务器和与所述主机服务器通信的多台从机服务器,所述主机服务器和所述从机服务器使用scrapy框架进行布局,且所述scrapy框架使用redis队列进行统一资源定位符url的管理,其中,从机服务器用于向主机服务器发送request;主机服务器用于基于request分配对应的url,并向所述从机服务器反馈包含该 url的request,从机服务器还用于根据包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中。通过本发明采用分布式爬虫来进行数据爬取并对分布式爬虫通过管理系统进行管理,不仅实现了对爬虫任务的集中管理,还节省了人力资源,完善了对爬虫任务的管理。
附图说明
[0023]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0024]
其中:
[0025]
图1为本发明实施例中分布式爬虫的集中管理系统的框架示意图;
[0026]
图2为本发明图1所示的实施例中的分布式爬虫的集中管理系统的示意图;
[0027]
图3为本发明实施例中分布式爬虫的集中管理系统的主机服务器与从机服务器交互式实现方式示意图;
[0028]
图4为本发明实施例中分布式爬虫的集中管理系统的页面解析的多线程开启流程图;
[0029]
图5为本发明实施例中分布式爬虫的集中管理系统的功能模块示意图。
具体实施方式
[0030]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0031]
请参阅图1及图2,图1为本发明实施例中分布式爬虫的集中管理系统的框架示意图,图2为本发明图1所示的实施例中的分布式爬虫的集中管理系统的示意图。
[0032]
本发明实施例中,分布式爬虫集中管理系统包括主机服务器(master)和与主机服务器通信的多台从机服务器(slave),如图2所示,其中,主机表示的是主机服务器,从机表示的是从机服务器,主机服务器和从机服务器使用如图1所示的scrapy框架进行布局,且scrapy框架使用redis队列进行统一资源定位符 (uniform resource locator,url)的管理;
[0033]
其中,如图1所示,scrapy框架包含引擎(scrapy egine)、调度器(scheduler)、下载器(downloader)、爬虫(speders)、管道(item pipeline)以及中间件(spider middlewares);
[0034]
其中,redis队列、调度器、引擎及管道布局在主机服务器,下载器、爬虫及中间件布局在从机服务器上;
[0035]
基于上述的框架,从机服务器用于向主机服务器发送request;主机服务器在接收到request之后,主机服务器用于基于request分配对应的url,并向从机服务器反馈包含url的request;从机服务器还用于根据包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中。
[0036]
本发明实施例,采用的是分布式爬虫scrapy_redis框架来进行爬虫的数据采集,scrapy_redis框架区别于其他的框架的不同之处在于,该框架可以进行集中调度,通过redis队列,做到一对多集中调度,即一个爬虫任务对应多个从机服务器。
[0037]
如图2所示,可以理解的是主机服务器即master,一个从机服务器对应一个slave,主机服务器与多台slave进行通信。
[0038]
进一步地,请参阅图3,图3为本发明实施例中分布式爬虫的集中管理系统的主机服务器与从机服务器交互式实现方式示意图,假设有四台设备:任意一台设备都可以作为master端或slaver端,本发明实施例中,将其中任意一台作为主机服务器即master端,其余设备作为从机服务器即slaver端。
[0039]
其中,master端:存在redis队列,将从从机服务器获取的request进行分配对应的url,以及将从机服务器爬取到的数据存储到预设数据库;slaver端:负责执行主机服务器获得的包含url的request的爬取,并在爬取运行过程中提交 request给主机服务器,将爬取到的数据存入预设数据库。
[0040]
本发明实施例中,进一步的,scrapy框架与django对接。
[0041]
首先,配置环境变量pythonpath,设置其值为此django的项目根目录的路径,例如e:\pythonprojects\helloscrapy。
[0042]
其次,在项目根目录下新建一个bots文件夹,进入bots目录,新建一个init.py 文件,内容如下:
[0043][0044]
然后,在bots目录下运行以下命令来新建一个scrapy项目:
[0045]
scrapy startproject testbot
[0046]
得到testbot项目结构如下:
[0047][0048]
然后,编写items、spiders、pipelines,最后进行爬虫设置部署,完成对接。
[0049]
可以理解的是上述对接过程描述所做示例,只做举例,不做具体限定。
[0050]
本发明实施例中,进一步的,主机服务器中设置有爬虫,主机服务器调用爬虫从网络获取url,并进行去重处理,将去重之后的url按照优先级添加至redis 队列。
[0051]
其中,可以理解的是,该框架将原本的scrapy queue换成了redis队列,因此scheduler调度器替换为scrapy_redis调度器,负责将从机服务器提交的request 进行入列操作,并去除下一个主机服务器要分配的基于request的url等操作。同时把待爬队列即从机服务器提交的request进行入列操作形成的队列,按照优先级建立了一个字典结构比
如:
[0052][0053]
其中,通过duplication filter组件实现去重功能,利用redis中的set的不重复的特性去重。调度器从引擎接受从机服务器提交的request,将request的指纹存入redis的set检查是否重复,并将不重复从机服务器提交的request进行入列操作写入redis的request queue。引擎将从机服务器发出的request送入主机服务器时,主机中的调度器从redis的request queue队列里根据优先级取出个对应的url,主机在通过引擎将包括request的url发给从机服务器爬虫进行爬取。
[0054]
本发明实施例中,进一步的,从机服务器还用于根据包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中,包括:
[0055]
从机服务器具体用于从包含url的request中提取url,并由下载器下载 url对应的页面,通过爬虫按照预设的匹配规则对页面进行解析及数据提取,并将提取的数据发送给主机服务器中的管道,管道则用于将提取的数据存储至预设的数据库中。
[0056]
本发明实施例中,进一步的,从机服务器采用多线程的方式对所述页面进行解析及数据提取。
[0057]
本发明实施例中,进一步的,多线程的数量由concurrent_requests 模块确定。
[0058]
其中,可以理解的是,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多线程就是在一个进程中的多个线程,如果使用多线程默认开启一个主线程,按照程序需求自动开启多个线程(也可以自己定义线程数)
[0059]
其中,普通的python爬虫是单进程单线程的,这样在遇到大量重复的操作时就只能逐个进行。例如,你有1000个美图的链接,送入给下载器,看着图片只能一个个下载出来,进度很慢,于是为了同时启动多个下载器,实现多图同时下载,因此使用多线程来实现,把每个带着不同参数下载器分给每个线程,然后实现高速下载。
[0060]
其中,页面解析过程如图4所示,图4为本发明实施例中分布式爬虫的集中管理系统的页面解析的多线程开启流程图。通过开启多线程解析页面,实现提升对页面的爬取速度。
[0061]
其中,引擎将从机服务器爬取到的item返回到管道item pipeline,可以理解的是,该框架将原本的scrapy queue换成了redis队列,因此scrapy-redis的管道 item pipeline将爬取到的item存入redis的items queue。因此,修改过itempipeline可以很方便的根据key从items queue提取item,从而实现items processes 集群。
[0062]
在本发明实施例中,进一步的,从机服务器中的爬虫继承爬虫功能及 redismixin,redismixin用于从包含url的request中提取url。
[0063]
可选的,当从机服务器中的爬虫处于空闲状态时,调用spider_idle函数, spider_idle函数用于调用schedule_next_request函数,以使得爬虫处于活着状态,且抛出dontclosespider异常。
[0064]
可选的,当从机服务器中的爬虫解析到数据时,调用item_scraped函数, item_scraped函数用于调用schedule_next_request函数,获取下一个request。
[0065]
可选的,继承所述爬虫功能时,调用steupsetup_redis函数,所述setup_redis 函数用于连接redis队列。
[0066]
其中,可以理解的是,该框架将原本的scrapy queue换成了redis队列,因此不再使用scrapy原有的spider类,重写的redisspider继承了spider和 redismixin这两个类,redismixin是用来从redis读取url的类。当我们生成一个spider继承redisspider时,调用setup_redis函数,这个函数会去连接redis队列,然后会设置signals(信号):
[0067]
当spider空闲时候的signal,会调用spider_idle函数,这个函数调用 schedule_next_request函数,保证spider是一直活着的状态,并且抛出 dontclosespider异常;
[0068]
当抓到一个item时的signal,会调用item_scraped函数,这个函数会调用schedule_next_request函数,获取下一个request。
[0069]
其中,为更好理解本发明实施例,对图一所示架构图进行必要且完整的解释:
[0070]
1.spiders(爬虫):它负责处理所有url,从中分析提取数据,获取item字段需要的数据,并将需要跟进的url提交给引擎,再次进入scheduler(调度器)
[0071]
2.engine(引擎):负责spider、itempipeline、downloader、scheduler中间的通讯,信号、数据传递等。
[0072]
3.scheduler(调度器):它负责接受引擎发送过来的request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
[0073]
4.downloader(下载器):负责下载scrapy engine(引擎)发送的所有requests 请求,并将其获取到的url交还给scrapy engine(引擎),由引擎交给spider来处理
[0074]
5.itempipeline(管道):它负责处理spider中获取到的item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
[0075]
6.downloader middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
[0076]
7.spider middlewares(spider中间件):你可以理解为是一个可以自定扩展和操作引擎和spider中间通信的功能组件(比如进入spider的url;和从spider出去的requests)
[0077]
以及其完整运行原理如下:
[0078]
1.spiders的yeild将request发送给engin;
[0079]
2.engine对request不做任何处理发送给scheduler;
[0080]
3.scheduler(url调度器),通过去重和优先级调度将生成包含request的 url交给engin;
[0081]
4.engine拿到包含request的url,通过middleware进行层层过滤发送给downloader;
[0082]
5.downloader在网上获取到包含request的url数据之后,又经过middleware进行
层层过滤发送给engin;
[0083]
6.engine获取到包含request的url数据之后,返回给spiders,spiders 的parse()方法对获取到的包含request的url数据进行处理,解析出items或者 requests;
[0084]
7.将解析出来的items或者requests发送给engin;
[0085]
8.engin获取到items或者requests传回主机服务器,将items发送给 itempipelines管道,将requests发送给scheduler进行去重和入列。
[0086]
其中如图5所示为本发明实施例中分布式爬虫的集中管理系统的功能模块示意图,图5展示了两个功能模块:网络爬虫模块,爬虫管理平台模块。
[0087]
其中,爬虫管理模块由主机服务器和从机服务器组成,主要负责对所有爬虫机的集中管控,通过一台中心服务器主机,去集中调度所有的爬虫从机服务器,且可以使用专门用来进行分布式部署的scrapy框架,该框架提供http接口用于实现部署、启动、停止、删除爬虫等等。
[0088]
其中,网络爬虫模块,就是负责海量数据的抓取功能。
[0089]
其中,从机服务器向主机服务器发送request,该request中携带ip,headers 等,主机服务器将基于redis队列中爬虫任务(url)的优先级确定url,并携带在request中反馈给从机服务器,从机服务器下载url对应的html页面,通过定制的xpath匹配规则,或者正则匹配规则,对该html页面进行匹配,获取所需要的数据,并将这些数据生成实例化对象,传入管道中,并保存至预设的数据库,例如可以是setting配置的mysql地址对应的表中。
[0090]
本发明实施例公开了一种分布式爬虫的集中管理系统,其中集中管理系统包括主机服务器和与所述主机服务器通信的多台从机服务器,所述主机服务器和所述从机服务器使用scrapy框架进行布局,且所述scrapy框架使用redis队列进行统一资源定位符url的管理,其中,从机服务器用于向主机服务器发送request;主机服务器用于基于request分配对应的url,并向所述从机服务器反馈包含该 url的request,从机服务器还用于根据包含url的request进行解析及数据提取,并将提取的数据存储到预设的数据库中。通过本发明采用分布式爬虫来进行数据爬取并对分布式爬虫通过管理系统进行管理,不仅实现了对爬虫任务的集中管理,还节省了人力资源,完善了对爬虫任务的管理。
[0091]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态 ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率 sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0092]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0093]
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1