一种分布式网络数据采集方法及其采集系统与流程

文档序号:17481649发布日期:2019-04-20 06:29阅读:252来源:国知局
一种分布式网络数据采集方法及其采集系统与流程

本发明涉及网络数据采集的技术领域,具体涉及一种分布式网络数据采集方法及其采集系统。



背景技术:

网络数据采集是指利用互联网搜索引擎技术实现有针对性、行业性和精准性的数据抓取,并按照相应的规则进行数据归类,形成数据库文件的一个过程。

公开号为cn108121706a的专利一种分布式爬虫的优化方法,所述该分布式爬虫的优化方法具体步骤如下:调度中心下发任务;爬虫按url抓取网页内容;解析器解析网页内容;如果网页更新较多,则把网页内容返回给数据仓库;解析器解析网页中的链接,在本地先用布隆过滤器进行去重;把通过了本地去重的url进行hash,该发明爬虫系统在对网页更新频率的处理上,规避了复杂的算法,提高爬虫的工作效率。

发明人在实践中,发现上述现有技术中存在以下缺陷:

在采集农业网站站点的数据信息时,爬虫工作虽然遵从了robots协议与网站进行交互,但长时间的和/或者频繁的正常的爬虫工作可能会被该网站的反爬虫错误的攻击,无法进行正常的抓取工作。



技术实现要素:

为了解决上述技术问题,本发明的目的在于提供一种分布式网络数据采集方法,所采用的技术方案如下:

一种分布式网络数据采集方法,该采集方法包括以下步骤:

调度器对请求队列中的链接进行去重,并将所述请求队列分配给相应的从机节点进行网络数据采集;

在某一采集节点的网络数据采集行为遭到所采集的网站的攻击行为时,触发相应的防御机制;

所述防御机制根据所述攻击行为判断攻击类型,并判断所述攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配;

在所述攻击类型与防御类型相匹配时,执行与所述防御类型对应的防御措施来解除攻击,进而继续进行网络数据采集;

在所述攻击类型与防御类型不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。

进一步,在所述采集节点的网络数据采集行为未遭到所采集的网站的攻击行为或者在解除攻击之后时,还包括:

判断所述采集节点是否捕捉到新链接;

在捕捉到新链接时,对所述新链接进行相关性评估,在所述新链接通过相关性评估后,将所述新链接发送给所述调度器进行去重,并将去重后的新链接加入到请求队列中;

在没有捕捉到新链接时,将采集到的数据结果进行存储。

进一步,所述调度器包括redis数据库和mongodb数据库,redis数据库用于存放所述请求队列,mongodb数据库用于存放采集的数据结果。

进一步,在所述调度器对请求队列中的链接进行去重之前,还包括根据实际任务获取种子链接。

进一步,所述防御机制至少包括以下防御机制中的一种或者多种:

在所述攻击类型为基于headers反爬虫时,则采取的防御措施为将浏览器的user-agent添加到所述scrapy的headers中或者将referer值修改为目标网站域名;

在所述攻击类型为基于图形验证码反爬虫时,则采取的防御措施为利用tesseract-ocr识别图形验证码,或者对相应的验证码进行二值化预处理、分割、模式训练后识别验证码;

在所述攻击类型为动态页面反爬虫时,则采取的防御措施为利用selenium+phantomjs框架,调用浏览器内核,并利用phantomjs执行脚本语言来模拟人为操作以及触发页面中的脚本语言;

在所述攻击类型为基于虚假信息反爬虫时,则采取的防御措施为通过数据内容相关性判断剔除一些因被反爬虫机制感知而故意返回的虚假信息。

本发明的另一个目的在于提供一种分布式网络数据采集系统,所采用的技术方案如下:

一种分布式网络数据采集系统,该采集系统包括:

调度模块,用于对请求队列中的链接进行去重,并将所述请求队列分配给相应的从机节点进行网络数据采集。

防御检测模块,用于检测相应的采集节点的网络数据采集行为是否遭到所采集的网站的攻击行为,在遭遇攻击行为时,触发相应的防御机制;

判断模块,用于在所述防御机制被触发时,根据所述攻击行为判断攻击类型,并判断所述攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配;

防御执行模块,用于在所述攻击类型与防御类型相匹配时,执行与所述防御类型对应的防御措施来解除攻击,进而继续进行网络数据采集;在所述攻击类型与防御类型不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。

进一步,该系统还包括:

新链接检测模块,用于判断所述采集节点是否捕捉到新链接;

相关性评估模块,用于在捕捉到新链接时,对所述新链接进行相关性评估,在所述新链接通过相关性评估后,将所述新链接发送给所述调度器进行去重,并将去重后的新链接加入到请求队列中;

数据存储模块,用于在未捕捉到新链接时,将所述采集节点采集到的数据信息进行存储。

进一步,所述调度器包括redis数据库和mongodb数据库,redis数据库用于存放所述请求队列,mongodb数据库用于存放采集的数据结果。

进一步,该系统还包括防御措施选择模块,根据所需采集的网络数据的特点与实际任务需求选择合适的防御措施;

进一步,该系统还包括种子链接获取模块,采集与实际任务需求相符合的初始链接加入请求队列中。

本发明具有如下有益效果:

本发明实施例通过调度器对请求队列中的链接进行去重,并将所述请求队列分配给相应的从机节点进行网络数据采集;在某一采集节点的网络数据采集行为遭到所采集的网站的攻击行为时,触发相应的防御机制,根据攻击行为判断攻击类型,并判断攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配;匹配时,执行对应的防御措施来解除攻击,进而继续进行网络数据采集;不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配,进而解决在正常的网络数据采集工作遭到所采集的网站错误攻击时,能够及时的采取相应的措施解除危机。

附图说明

图1为本发明各个实施例所涉及的实施环境图;

图2为本发明实施例提供的一种分布式网络数据采集方法的方法流程图;

图3为本发明另一个实施例所提供的一种分布式网络数据采集方法的方法流程图;

图4为与图3相对应的逻辑流程图;

图5为关于scrapy-redis调度器的工作整体框架图;

图6本发明实施例提供的一种分布式网络数据采集系统的结构框图。

具体实施方式

下面通过具体实施例结合附图来详细说明本发明,需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合,本发明的保护范围并不限于此。

请参阅图1,其示出了本发明各个实施例所涉及的实施环境图,该实施环境包括主机100、从机200和互联网300。

主机100是指发布主要命令的计算机,可以是台式计算机、便携式计算机、平板电脑、或者其他能够用作发布主要命令的智能终端等等。在该主机100中设有scrapy框架,该scrapy框架主要包括引擎、通过调度中间件与引擎交互的调度器、通过下载中间件与引擎交互的下载器、与引擎交互的项目管道、通过采集端中间件与引擎交互的网络数据采集端。所述引擎用来处理整个系统的数据流处理,触发事务。所述调度器接收引擎发送的链接,并将其放入请求队列中,在引擎再次请求时返回;其中,调度中间件处于引擎和调度器之间,用于处理从引擎发送到调度器的请求和响应。下载器用于下载网页的内容,并将该内容返回给网络数据采集端;其中,下载中间件用于处理引擎和下载器之间的请求及响应。网络数据采集端用于从特定的网页中提取所需数据信息或者提取新链接,让引擎继续抓取下一个页面;其中,采集端中间件处于引擎和采集端之间,用于处理引擎和采集端的相应输入和请求输出。项目管道用于将所提取的数据信息进行进一步的处理,清除不需要的信息。

从机200是指用于接收主机发布的命令,并执行相应命令的计算机,从机200可以是一台服务器,或者由若干台服务器组成的服务器集群,例如图1中所示出的第一服务器21、第二服务器22、第三服务器23和第n服务器2n等。从机中设有与所述主机相应的网络数据采集端,用于采集互联网300中的数据信息。在从机中还设有防御机制,在检测到相应的网络数据采集端遭受到所采集的网站的攻击时,触发相应的防御机制,以防被网站错误的攻击,影响正常的网络数据采集工作。

互联网300是指网络数据采集端采集目标数据的目标网站。

主机100与从机200之间可以通过无线或者有线网络相连,从机200与互联网300之间可以通过无线或者有线网络相连。

请参阅图2,其示出了本发明实施例提供的一种分布式网络数据采集方法的方法流程图,该采集方法包括以下步骤:

步骤201,调度器对请求队列中的链接进行去重,并将该请求队列分配给相应的从机节点进行网络数据采集。

去重是指已经被采集过的或者在请求队列中的链接,不再添加至请求队列,避免重复采集同一链接的相同数据信息。

步骤202,在某一采集节点的网络数据采集行为遭到所采集的网站的攻击行为时,触发相应的防御机制。

在进行正常的网络数据采集时,客户端遇到了http错误,例如出现错误代码为403的禁止访问错误,可能目前所采集的网站的反爬虫机制已经启动,将正常的网络数据采集行为所对应的ip认定为机器人,此时该网站将不会接受来自这个ip的任何请求,也有可能接受完请求之后返回虚假数据。

步骤203,该防御机制根据攻击行为判断攻击类型,并判断攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配。

在正常的网络数据采集的行为遭受攻击后,触发相应的防御机制,判断该网站所采取的攻击类型。攻击类型有很多种,例如基于图形验证码反爬虫、基于动态页面反爬虫、基于headers反爬虫或者返回虚假信息反爬虫等。面对这些攻击类型,单一的防御措施不再适用。为了保证农业网络数据采集工作的顺利进行,针对常见的反爬虫的攻击类型,在防御机制中预先设定了针对不同攻击类型的防御措施,在遭遇到攻击时,首先判断攻击类型是否能够与预设防御类型中的一种进行匹配。

步骤204,在该攻击类型与防御类型相匹配时,执行与该防御类型对应的防御措施来解除攻击,进而继续进行网络数据采集。

在判断出攻击类型在预先设定的防御类型中时,则采用预设的防御措施来解除危机,以便尽快回复正常的数据采集工作。

步骤205,在该攻击类型与防御类型不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。

在判断出攻击类型不在预先设定的防御类型中时,由于该采集点遭遇到未知的反爬虫的攻击,因此取消该采集点的采集工作。

综上所述,本发明实施例通过调度器对请求队列中的链接进行去重,并将所述请求队列分配给相应的从机节点进行网络数据采集;在某一采集节点的网络数据采集行为遭到所采集的网站的攻击行为时,触发相应的防御机制,根据攻击行为判断攻击类型,并判断攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配;匹配时,执行对应的防御措施来解除攻击,进而继续进行网络数据采集;不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配,进而解决在进行正常的网络数据采集工作时遭到所采集的网站错误攻击时,能够及时的采取相应的措施解除危机。

请参阅图3和图4,图3示出了本发明另一个实施例所提供的一种分布式网络数据采集方法的方法流程图,图4示出了与图3相对应的逻辑流程图。该采集方法以采集农业网站的数据信息为例来具体说明本实施例,该采集方法包括以下步骤:

步骤301,根据农业网络数据与实际任务需求选定合适的防御策略,并获取合适的种子链接。

常见的网络爬虫策略有深度优先和广度优先两种防御策略算法,根据常见的爬虫,选择合适的防御策略。

步骤302,调度器对请求队列中的链接进行去重,并将所述请求队列分配给相应的从机节点进行网络数据采集。

优选的,本发明实施例中的调度器是在scrapy框架的基础上,将主机内存替换为redis数据库搭建的分布式架构的scrapy-redis调度器,scrapy-redis调度器包括redis数据库和mongodb数据库,redis数据库用于存放所述请求队列,mongodb数据库用于存放采集的数据结果。该调度器主要负责对请求队列去重,将请求队列分配给相应的从机节点进行网络数据的采集工作。将主机内存替换为redis数据库搭建的分布式架构的方法为,在原单机爬虫代码的基础上,在settings.py中作如下设置:

scheduler="scrapy_redis.scheduler.scheduler"

dupefilter_class="scrapy_redis.dupefilter.rfpdupefilter"

redis_start_urls_as_set=true

redis_url=‘redis://用户名:密码@ip:6379'

其中,scheduler负责任务分发与调度,把所有的爬虫开始的url请求都存放在redis数据库中,所有爬虫节点都去redis数据库中读取请求;dupefilter_class是去重队列,主要负责所有请求的去重;redis_start_urls_as_set指的是使用redis数据库中的set类型,默认设置是list;redis_url是指改为自己设置的redis的名称、密码与ip,端口号默认为6379。

在scrapy框架的基础上使用redis数据库替换单机内存变成scrapy-redis调度器开展分布式爬虫工作,在分布式的基础上增设防御节点来应对影响正常爬虫工作的反爬虫行为,以此来保证网络爬虫高效、稳定的工作状态。

请参阅图5,其示出了该scrapy-redis调度器的工作整体框架图,图中引擎501通过调度中间件502与调度器503进行信息交互,通过下载中间件505与下载器505进行信息交互,通过spider中间件506与爬虫507进行信息交互,直接与项目管道组件508进行信息交互,下载器505对网络509中的内容进行下载。下面结合附图对该工作框架进行详细的介绍,其中引擎用scrapyengine表示,调度器用scheduler表示,调度中间件用schedulermiddlewares表示,项目管道组件用itempipeline表示,爬虫或者数据网络采集用spider表示,spider中间件或者数据采集端中间件用spidermiddlewares表示,下载器用downloader表示,下载中间件用downloadermiddlewares表示,其工作流程如下:

第一步,spider解析downloader返回的对象是item或者urllinks,该urllinks是指网址链接。

第二步,item或者urllinks经过spider中间件交给scrapyengine。

第三步,scrapyengine将item交给itempipeline,将urllinks交给scheduler;

第四步,在scheduler中,先将request对象利用scrapy内置的指纹函数,生成一个指纹对象。该request对象是指将待采集的url链接进行封装后的请求对象。

第五步,如果request对象中的dont_filter参数设置为false,并且该request对象的指纹不在信息指纹的请求队列中,那么就把该request对象放到请求队列中,完成去重,避免重复抓取同一个链接的数据,并且按照优先级进行排序等待。

第六步,从请求队列中获取request对象,交给scrapyengine。

第七步,scrapyengine将request对象通过downloadermiddlewares交给downloader进行下载。

第八步,downloader完成下载,获得response对象,将该response对象交给scrapyengine。

第九步,scrapyengine将获得的response对象通过spidermiddlewares交给spider进行解析。

第十步,从第一~十步开始循环,直至爬虫工作结束。

以上就是scrapy-redis调度器的工作整体框架,与现有的scrapy框架的区别是将scrapy的内置的去重的队列和待采集的request队列换成了redis的集合,这就使得scrapy-redis实现了分布式爬虫。

步骤303,判断该采集节点的网络数据采集行为是否遭到所采集的网站的攻击行为。

在任意一个采集节点出现错误或者采集工作被关闭的现象,则立即检测采集工作是否被攻击,若被攻击立即启动防御机制。这里所说的攻击行为是指所采集的目标网站启动的反爬虫机制,当该目标网站检测到同一个ip进行多次频繁或者长时间的采集数据的行为时,对该采集行为所对应的ip的后续行为设置验证码、账号及cookie验证、user-agent+referer检测、ip限制频次等方法限制或者阻止该ip的行为。

步骤304,在遭到攻击行为时,触发相应的防御机制。

在spider被所采集的网站的反爬虫机制攻击时,则scrapy中的防御机制启动。

步骤3041,该防御机制根据攻击行为判断攻击类型,并判断该攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配。

步骤3042,在该攻击类型与防御类型相匹配时,执行与该防御类型对应的防御措施来解除攻击,进而继续进行网络数据采集。

优选的,攻击类型及其相应的预设的防御措施至少包括以下类型中的一种或者多种:

第一种,攻击类型为基于headers的反爬虫。基于headers反爬虫是网站反爬行为中最常见的反爬虫策略。相应的被攻击的从机节点的信息设定为chromeheadless或者来将referer值修改为目标网站域名模拟浏览器环境。多数网站会对headers的user-agent和referer进行检测,若该攻击类型属于此类反爬虫行为,则采用的防御措施为:直接在scrapy中将浏览器的user-agent添加到scrapy的headers中或者将referer值修改为目标网站域名。

第二种,攻击类型为基于图形验证码反爬虫。基于图形验证码反爬虫主要针对数字、字母或者图片验证码。相应的被攻击的从机节点采用的防御措施为利用tesseract-ocr识别图形验证码,也可对验证码进行二值化预处理、分割、模式训练后,识别验证码。

第三种,攻击类型为基于动态页面反爬虫。针对该攻击类型的反爬虫,采用的防御措施为:调用浏览器内核,利用selenium+phantomjs框架,调用浏览器内核,并利用phantomjs执行脚本语言来模拟人为操作以及触发页面中的脚本语言。

第四种,攻击类型为基于虚假信息反爬虫。针对该攻击类型的反爬虫,采用的防御措施为:通过数据内容相关性判断,剔除一些因被反爬虫机制感知而故意返回的虚假信息。

步骤3043,在该攻击类型与防御类型不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。

在没有预设与该攻击类型相应的防御措施时,则取消该spider的数据采集任务,并将未采集的request对象返回至调度器等待重新分配。

步骤305,在未遭到攻击行为或者在解除攻击之后,则进行正常的数据采集工作,判断采集节点是否捕捉到新的链接。

在spider未遭到网站的反爬虫机制攻击时,则进行正常的采集数据的工作。

步骤3051,在捕捉到新链接时,对所述新链接进行相关性评估,在所述新链接通过相关性评估后,将所述新链接发送给所述调度器进行去重,并将去重后的新链接加入到请求队列中。

在spider捕捉到新链接后,将该新链接通过spider中间件发送给scrapyengine,在redis数据库接收该新链接后,对该新链接进行去重,并将其加入到相应的请求队列中。

步骤3052,在没有捕捉到新链接时,将采集到的数据结果进行存储。

在spider没有捕捉到新链接时,spider将采集到的数据信息发送给mongodb数据库进行存储。

综上所述,本发明实施例通过选择合适的爬虫策略和种子链接,构建分布式网络数据采集的框架,主机通过调度器向从机发布命令,调度器向一个或者多个从机分配网络数据采集的任务,通过spider进行网络数据的采集工作,每一个spider作为一个采集节点,在检测到相应的采集节点被所采集的网站攻击时,触发相应的防御机制,根据攻击行为判断攻击类型,进而判断该攻击类型是否与防御机制中预设的防御类型相匹配,在相匹配的情况下,执行相应的命令接触危机,继续进行正常的采集工作;在所述攻击类型与防御类型不匹配时,取消相应的采集节点。在spider正常工作时,未检测出攻击行为时,判断采集节点是否捕捉到新链接,在未捕捉到新链接时,将spider采集到的数据存储到mongodb数据库中;在判断出捕捉到新链接时,将该新链接进行url相关性评估,在相关性评估通过时,将该新链接发送给调度器去重,然后加入到请求队列中,等待分配,进而解决在进行正常的网络数据采集工作时遭到所采集的网站错误攻击时,能够及时的采取相应的措施解除危机。利用scrapy-redis组件搭建分布式架构,不仅能够实现高效采集,而且在防御反爬虫的攻击上,使用分布式的防御措施能够有效避免单个主机的压力,同时防止该主机故障造成的损失,增强了该系统的健壮性,保证爬虫工作的稳定进行。

请参阅图6,其示出了本发明实施例提供的一种分布式网络数据采集系统的结构框图,该采集系统包括调度模块601、防御检测模块602、判断模块603和防御执行模块604。

调度模块601对请求队列中的链接进行去重,并将该请求队列分配给相应的从机节点进行网络数据采集。

优选的,调度模块为scrapy-redis模块,其是在scrapy框架的基础上,将主机内存替换为redis数据库搭建的分布式架构作为scrapy-redis调度模块,scrapy-redis调度模块的主机端设置一个redis数据库和一个mongodb数据库,redis数据库用于存放请求队列并对从机节点提交的任务进行去重及放入待爬取的队列,mongodb数据库用于存放采集的数据结果。从机节点接收主机分配的采集任务,并将采集到的数据结果或者新链接传递给主机,主机将数据结果放入mongodb数据库,将新链接放入redis数据库进行处理。

优选的,该系统还包括防御措施选择模块60,在搭建分布式架构之前,根据所需采集的网络数据的特点与实际任务需求选择合适的防御措施。

防御检测模块602检测相应的采集节点的网络数据采集行为是否遭到所采集的网站的攻击行为,在遭遇攻击行为时,触发相应的防御机制。在任意一个采集节点出现错误或者采集工作被关闭的现象,则立即检测采集工作是否被攻击,若被攻击立即启动防御机制。

在该防御机制被触发时,判断模块603根据攻击行为判断攻击类型,并判断攻击类型与该采集节点所对应的从机节点预设的防御类型是否相匹配;

在攻击类型与防御类型相匹配时,防御执行模块604执行与防御类型对应的防御措施来解除攻击,进而继续进行网络数据采集;在攻击类型与防御类型不匹配时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。

优选的,在进行正常的数据采集工作的情况下或者在接触危机后恢复正常工作之后,该系统还包括新链接检测模块606、相关性评估模块606和数据存储模块607。

新链接检测模块606判断采集节点是否捕捉到新链接;在捕捉到新链接时,相关性评估模块606对该新链接进行相关性评估,在新链接通过相关性评估后,将新链接发送给调度器进行去重,并将去重后的新链接加入到请求队列中;在未捕捉到新链接时,数据存储模块将所述采集节点采集到的数据信息进行存储。

优选的,该系统还包括种子链接获取模块61,在进行网络数据采集之前,采集与实际任务需求相符合的初始链接加入请求队列中。

综上所述,本发明实施例通过调度模块对请求队列中的链接去重,并将请求队列分配给相应的从机节点进行网络数据采集;防御检测模块检测相应的采集节点的网络数据采集行为是否遭到所采集的网站的攻击行为,在遭遇攻击行为时,触发相应的防御机制,判断模块判断攻击类型,在判断出存在匹配类型时,防御执行模块执行相应的防御措施来解除攻击,进而继续进行网络数据采集;在判断出不存在匹配类型时,取消该采集节点的网络数据采集行为,并将未采集的请求队列返回至调度器等待重新分配。该实施例利用scrapy-redis组件搭建分布式架构实现高效采集,在应对反爬虫的攻击上,使用分布式的防御措施可以有效避免单个主机的压力与故障,增强平台的健壮性,从而保证爬虫工作的稳定进行。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1