一种分布式垂直爬虫服务系统的优化方法

文档序号:9506197阅读:311来源:国知局
一种分布式垂直爬虫服务系统的优化方法
【技术领域】
[0001]本发明涉及网络数据传输方法,具体来说涉及一种分布式垂直爬虫服务系统的优化方法。
【背景技术】
[0002]随着互联网的发展,互联网中包含的信息内容越来越多,搜索引擎可以帮助人们在海量信息中寻找自己感兴趣的内容,一般的搜索引擎,如百度、Google和Bing等,都是面向所有用户提供互联网内容搜索服务。这些搜索引擎需要通过爬虫技术不断地从互联网上获取信息,并将这些信息保存起来,以便人们方便地检索这些信息。由于需要爬取的数据量巨大,因此大规模的搜索引擎往往采取分布式处理机制,即建立分布式爬虫服务系统。这些爬虫从统一的下载队列中获取目标URL,然后将目标网页下载存储到指定的位置。
[0003]搜索引擎越来越多,这些搜索引擎的爬虫不断地获取网站的内容,网站系统的压力越来越大,1994年6月30日,在经过搜索引擎人员以及被搜索引擎抓取的网站站长共同讨论后,正式发布了一份行业规范,即Robots协议。Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclus1n Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
[0004]由于人们在信息检索时都带有明确的目标,而一般的搜索引擎返回的信息过于繁杂,甚至有些不相干的信息也被检索出来,人们希望搜索引擎可以针对某个特定领域提供信息检索服务,同时还希望搜索引擎能够对检索出的内容做一些基本的分析处理,垂直搜索引擎便应运而生。垂直搜索引擎往往只面向特定领域,如去哪网仅面向在线旅游领域,因此它所爬取的内容不必覆盖整个互联网,而仅仅是特定领域的网站即可。但他需要对这些网站内容进行简单的处理,如格式转换或按排序某些特征排序等。
[0005]目前垂直搜索引擎沿用了一般搜索引擎的设计方法,在总体结构上采用分布式处理机制,在爬虫逻辑单元上采用一体化设计模式。一般搜索引擎在爬虫处理逻辑方面的工作比较简单,只需要下载并存储即可,而垂直爬虫的处理逻辑比较负载,除了下载和存储之夕卜,还需要对网页内容进行简单的分析处理。随着大数据时代的到来,垂直爬虫所需要处理的信息量越来越多,部分网站又采取了动态页面技术,使得网页的下载和分析逻辑越来越复杂,而由于传统的爬虫服务系统在爬虫逻辑单元上采用一体化设计模式,使得爬虫逻辑单元性能低下。此外,由于部分网站主们不遵守Robots协议,这也导致垂直爬虫服务系统几乎无法正常工作。

【发明内容】

[0006]本发明的目的在于提供一种分布式垂直爬虫服务系统的优化方法,该方法能够提升垂直爬虫在处理大量数据信息时的效率,增强对对采用了延迟加载的动态HTML页面的抓取能力,对于页面下载逻辑和分析处理逻辑进行有效地管理和扩展,对网站主的爬虫防御策略提供有效地规避。
[0007]本发明的目的可通过以下的技术措施来实现:一种分布式垂直爬虫服务系统的优化方法,包括如下内容:
[0008]将原有的爬虫服务系统拆分为下载服务和页面分析逻辑两部分,且将该下载服务和分析逻辑均部署在多个云主机上,任务队列也拆分为下载任务队列和分析任务队列。
[0009]其中,所述下载服务采用如下下载任务流程:
[0010](1.1)下载服务从下载队列中获取下载任务;
[0011](1.2)下载服务判断下载任务中的页面类型;
[0012](1.3)根据页面类型加载页面下载逻辑单元;
[0013](1.4)页面下载逻辑单元读取下载参数;
[0014](1.5)页面下载逻辑单元根据两次任务的最小时间间隔随机生成本次任务结束后的休眠时间;
[0015](1.6)页面下载逻辑单元在可选的UserAgent列表中随机选择一个作为本次任务的 UserAgent ;
[0016](1.7)页面下载逻辑单元在可选的REFERER列表中随机选择一个作为本次任务的REFERER ;
[0017](1.8)页面下载逻辑单元向目标URL发出HTTP请求;
[0018](1.9)页面下载逻辑单元判断服务器的返回值,并根据返回值确定下载是否成功。
[0019]所述页面分析逻辑采用如下页面分析任务流程:
[0020](2.1)当下载任务状态变为成功后,下载任务守护进程会将下载任务转移至分析任务队列中;
[0021](2.2)页面分析逻辑将从分析队列中获取任务信息;
[0022](2.3)页面分析逻辑将根据分析任务中的类名,调用相应的Java类,并将目标URL保存路径和分析结果保存路径以命令行参数形式传递给Java类;
[0023](2.4)待Java类运行完毕后,判断退出结果是否为1,将任务状态更新为成功;
[0024](2.5)如果为I则表示分析程序正常结束,否则表示分析程序运行出错;
[0025](2.6)页面分析逻辑将判断出错次数,一旦次数超过3次则向管理员发出告警并将任务状态更新为失败。
[0026]其中页面类型方式分为静态页面和动态页面两种。所述步骤(1.3)中根据页面类型加载页面下载逻辑单元包括:如果页面类型为静态页面,则加载静态页面下载逻辑单元;如果页面类型为动态页面,则加载动态页面下载逻辑单元。
[0027]所述步骤(1.9)中页面下载逻辑单元判断服务器的返回值,并根据返回值确定下载是否成功的具体过程包括:
[0028]对于静态页面,静态页面下载逻辑单元判断服务器的返回值是否为200 ;
[0029]如果返回值为200,则接收返回内容,并将返回内容写入目标路径中,之后将下载任务状态更新为下载成功;否则将任务状态更新为下载失败;
[0030]对于动态页面,动态页面下载逻辑单元判断服务器的返回值是否为200 ;
[0031]如果返回值不为200,则将任务状态更新为下载失败;
[0032]如果返回值为200,根据任务中的延迟加载所使用的JavaScript函数名,触发JavaScript函数,此时JavaScript会再次向服务端发起HTTP请求;
[0033]如果该再次向服务端发起HTTP请求的回返值为200,则并将返回内容写入目标路径中,之后将下载任务状态更新为下载成功;否则将任务状态更新为下载失败。
[0034]所述下载任务队列中的每个下载任务中描述了目标URL、页面类型、下载页面的保存路径、动态页面延迟加载所使用的JavaScript函数名、页面分析类型。所述页面分析类型用于指示采用何种方式来分析下载页面。
[0035]所述爬虫服务系统的存储设备采用HDFS的分布式存储方式,下载页面的保存路径形式为 ^hdf s: //namenode: namenodeport/parent/child,,。
[0036]所述分析任务描述了目标URL保存路径、分析类的类名和分析结果保存路径。其中分析类的类名指定了被调用的Java类。分析结果保存路径同样采用HDFS形式。
[0037]本发明的有益效果在于:
[0038](I)采用分治的思想将原有爬虫处理逻辑拆分为下载和分析两部,使得下载效率和分析效率都可以得到较大的提升。
[0039](2)下载逻辑被独立拆分后,通过接口技术可以有效地扩展下载能力,既能支持静态页面下载,又能支持动态页面下载。
[0040](3)分析逻辑被独立拆分后,可以通过分析任务管理各种分析逻辑,分析逻辑的实现方式既可以是普通的Java程序,又可以是基于Hadoop的MapReduce程序,这种方法不仅能增强分析逻辑的处理性能,还可以降低分析逻辑的开发难度。
[0041](4)通过随机参数的控制,可以将爬虫行为混入用户访问行为中,使得网站主难以有效地识别爬虫行为,提升了爬虫下载页面的成功率。
【附图说明】
[0042]图1是现有的一般分布式垂直爬虫服务系统工作流程;
[0043]图2是本发明的一般分布式垂直爬虫服务系统结构示意图;
[0044]图3是本发明的一般分布式垂直爬虫服务系统的下载服务流程图;
[0045]图4是本发明的一般分布式垂直爬虫服务系统的页面分析逻辑流程图。
【具体实施方式】
[0046]现有的一般分布式垂直爬虫服务系统工作流程如图1所示。爬虫服务以多线程或多进程方式运行,他们可能部署在企业内部的一个主机或多台主机上。每个爬虫服务都从任务队列中获取一个下载任务,然后向目标URL地址发送HTTP请求,并将返回的结果保存到内存中,再利用DOM分析器对HTML页面进行内容解析,之后通过DOM选择器挑选有用的信息,最后将这些有用的信息保存的存储设备上。
[0047]本发明对一般分布式垂直爬虫的结构与流程进行优化,优化后的流程如图2所示。本发明将原有的爬虫服务系统拆分为下载服务和页面分析逻辑两部分,且将该下载服务和分析逻辑均部署在多个云主机上,任务队列也拆分为下载任务队列和分析任务队列。
[0048]每个下载任务中描述了目标URL、页面类型、下载页面的保存路径、动态页面延迟加载所使用的JavaScript函数名、页面分析类型。其中页面类型方式分为静态页面和动态页面两种。存储设备采用HDFS的分布式存储方式,下载页面的保存路径形式为“hdfs://namenode: namenodeport/parent/chi Id”。页面分析类型则用于指示采用何种方式来分析下载页面。
[0049]下载服务根据下载任务中的页面类型,动态加载对应的页面下载逻辑单元以完成页面下载任务。静态页面下载逻辑单元采用HTTP请求方式下载目标页面,而动态页面下载逻辑单元则利用HTMLUNIT触发动态页面中的延迟加载方法,实现对延迟加载内容的获取(见(1.20)步骤)。所有页面下载逻辑单元都将从参数管理器中读取必要的参数,这些参数包括两个下载任务之间间隔的最小时间,下载任务可以设置的浏览器UserAgent列表,下载任务可以设置的HTTP Referer信息列表等。页面下载逻辑单元随机设置这些参数,来躲避站长对爬虫的封锁。当下载服务完成下载后,向下载任务队列报告下载结果。下载任务队列将完成下载的任务转移至分析任务队列中。
[0050]分析任务描述了目标URL保存路径、分析类的类名和分析结果保存路径。其中分析类的类名指定了被调用的Java类。分析结果保存路径依旧采用HDFS形式。
[0051]每个页面分析逻辑可以是一个普通Java类,也可以是MapReduce类。对于普通Ja
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1