张胜敏,王爱菊
(1.开封大学 信息工程学院,河南 开封 475004;2.郑州工程技术学院 信息工程学院,河南 郑州 450044)
随着物联网技术的快速发展,网络资源量不断增加,相应的,对网络信息检索技术的要求也在逐渐提高。如何快速准确地检索出网络信息成为搜索引擎研究面临的重要课题。像百度、Google、搜狗等常用的搜索引擎都存在着一定的局限性。现有的检索方式包括基于关键词的检索、基于特定语义的检索等等。基于关键词的检索是常用的搜索方式,该方式简单便捷,但检索的结果与预期还存在较大的差距。搜索引擎发展面临种种挑战,需要有效应对,定向抓取网络资源的网络爬虫技术由此产生。网络爬虫是一个按照特定主题和一定规则来抓取网络上页面资源的检索程序,它为搜索引擎提供检索数据。该检索程序已经被广泛应用,目前在各种搜索引擎中都存在。网络爬虫抓取网页资源的原理是:从种子YRL数据集合入手,提取出种子YRL在页面上内部链接的YRL。在抓取页面资源的过程中,需要不断从当前网络页面上抽取新的YRL放入YRL种子集合,从YRL种子集合中筛选出符合抓取主题条件的YRL,然后开始抓取网页资源,如此循环往复,直至满足检索引擎预先设定的抓取深度为止。网络爬虫会根据抓取主题,有针对性地抓取网络上的页面资源,以此获取与主题相关的网页信息。网络爬虫的开发与使用解决了搜索引擎的一部分问题,相对于搜索引擎原有的数据检索程序而言,它是先进的,但还不够,它还需要解决定义抓取主题、大量过滤网络数据、URL抓取策略等问题。目前常用的网络爬虫主要分为单一主题网络爬虫和聚焦网络爬虫。这两种网络爬虫由于抓取主题单一,所以检索结果的数据量庞大,需要对其进行二次检索,检索过程繁琐。现实表明,传统的网络爬虫已经无法满足搜索引擎发展的需求。本文设计了一种基于Python的分布式多主题网络爬虫,目的是提高搜索引擎的搜索效率和精度。
网络爬虫需要完成的主要任务是获取CEO的Series数据库中的所有网页资源。要通过超链接的方式,使网页与爬虫相对应,实现高效、快速、准确的抓取,取得良好的应用效果。此次网络爬虫设计与传统爬虫设计最大的不同之处就是在设计中加入了Python技术,实现了分布式多主题网页资源抓取。此次设计的网络爬虫要满足可扩展性、跨平台性、高能性、健壮性等设计需求[1]。其中,可扩展性和跨平台性主要体现为网络爬虫能够应用到多个检索领域。网络爬虫需要根据分布式多主题抓取到大量的网页资源,这些网页资源由于来源不同,所以其数据格式也有所不同。网络爬虫因为要容纳多种格式的网页资源,所以必须具备较强的可扩展性和跨平台性。高能性体现为网络爬虫既能获取大量的网页信息,还能保持较快的抓取速度,具有很高的抓取效率。高能性是网络爬虫必须具备的基础性能[2]。健壮性主要体现为网络爬虫能够有效处理各种疑难问题、消除各种异常现象且遵循最优的抓取途径。Python技术为网络爬虫提供了合理的程序异常处理手段与抓取途径。网络爬虫在抓取网页资源的过程中,会遇到各种异常现象,比如由程序错误导致的闪退、突然死机、网页编码不合理等,所以网络爬虫必须具备健壮性,拥有强大的能力,能够有效处理各种疑难问题、消除各种异常现象且遵循最优的抓取途径,这是十分重要的。以下分别从架构与抓取途径两个方面,进行基于Python的分布式多主题网络爬虫设计。
根据上文对网络爬虫的功能需求和性能需求的分析,我们将网络爬虫的构架设计为分布式架构,其目的是使网络爬虫实现多主题并行搜索,提高网络爬虫的整体性能,以此实现分布式多主题网络爬虫的设计目标[3]。此次设计的分布式网络爬虫架构主要包括物理架构与逻辑架构。其中,物理架构由Python集群与Storm集群两部分组成,逻辑架构由指标计算部分和处理部分组成。
图1为基于Python的分布式多主题网络爬虫物理架构。从图1中可以看出,Python集群与Storm集群这两个集群是分开的。这两个集群也可以部署在同一台机器上,此次将这两个集群分开设计,主要是考虑到网络爬虫的运行压力。为了避免Python集群与Storm集群对网络爬虫造成运行压力,增强网络爬虫对网页资源的抓取性能,我们采用了分开部署的方式。Python集群主要负责网络爬虫的程序运行。部署Python集群的目的是提高网络爬虫的分布式存储能力和分布式计算能力。Python集群可以将每个网络爬虫任务都划分成多个子任务,并将它们分布到各个Name Node节点上,同时,将爬虫抓取到的网页资源储存到集群中。Storm集群主要负责实时计算出网络爬虫抓取指标的结果,该指标是指网络爬虫抓取页面阶段与分析页面阶段产生的相关指标数据。
图1 基于Python的分布式多主题网络爬虫物理架构
除了设计分布式网络爬虫物理架构之外,根据网络爬虫的功能需求和抓取流程需求,我们又设计了分布式网络爬虫的逻辑架构。组成逻辑架构的指标计算部分和处理部分,是与分布式网络爬虫物理架构中的两部分一一对应的[4]。处理部分主要负责网络爬虫抓取任务的实现,抓取到的网页资源,利用分布式数据库Hlbase进行储存;指标计算部分在Storm集群平台上实现,该部分配合Storm集群,实时计算网络爬虫在抓取过程中产生的相关指标数据,并将计算结果同样利用分布式数据库Hlbase储存起来。
通过以上步骤和方式,实现了分布式多主题网络爬虫架构设计。
此次设计了三种网络爬虫抓取途径,包括API接口抓取数据、GUI接口下载数据[5]、编写爬虫程序下载数据。
1.2.1 API接口抓取数据
API是一种应用程序编程接口,该接口通过预先定义的函数为应用程序提供访问一组例程的能力。传统网络爬虫抓取路径接口需要编写函数以及理解爬虫内部的抓取机制,导致网络爬虫抓取效率较低。此次运用API接口设计了一条抓取路径,API接口使用起来比较简单便捷。通过改进接口,可以使网络爬虫快速获取所需要的网页资源,而不需要了解网络爬虫的具体抓取过程。用一个API接口直接下载网页数据,可以有效保证抓取数据格式、数据结构的完整性。
1.2.2 GUI接口下载数据
GUI接口抓取路径是为网络图形数据资源抓取服务的。GUI是一种图形接口,该接口拥有强大的图形获取功能,网络爬虫通过该接口,完成图形等网页资源的抓取,并将抓取到的网页资源以最直观的图形方式呈现出来。该途径不需要网络爬虫记忆大量的抓取命令,网络爬虫只需要执行少量的选择命令、执行命令即可完成抓取任务。该途径占用的网络资源较少,且具有较高的可靠性。
1.2.3 编写爬虫程序下载数据
编写爬虫程序抓取路径相对于前两种路径,具有高效率、高质量抓取等优点,使网络爬虫可以在互联网大量的公开数据抓取中支持正则表达式操作。该路径拥有强大的脚本语言系统作为抓取支持。该路径是运用hadoop编写技术设计的。通过该路径,可以精准获取到与主题相关的数据。操作简单高效,接口稳定性好,并且还能增强网络爬虫的稳健性能[6]。
本文设计了三种网络爬虫抓取路径,完成了基于Python的分布式多主题网络爬虫研究。
此次根据搜索引擎对网络爬虫的需求,设计了一种基于Python的分布式多主题网络爬虫。为了证明该网络爬虫能够更好地满足搜索引擎的检索需求,我们进行一组对比实验,将两种网络爬虫应用到同一种搜索引擎上,对比两种网络爬虫的抓取速度。实验环境中,共部署了5台R780机架式服务器,将其中3台服务器分配到Python集群,2台服务器分配到Storm集群。表1为5台服务器的部署情况。
表1 网络爬虫服务器配置参数
此次实验共进行8次检测,每次都给两个网络爬虫各分配100个抓取任务,以检验此次设计的网络爬虫的抓取速度。图2为两种网络爬虫抓取速度对比图。
图2 两种网络爬虫抓取速度对比
图2显示,此次设计的网络爬虫平均抓取速度为65000YRL/h,而传统爬虫平均抓取速度为35000 YRL/h,远远低于此次设计的网络爬虫。实验证明,此次设计的基于Python的分布式多主题网络爬虫拥有较高的抓取速度。
此次将Python技术应用到网络爬虫设计中,推出一个分布式多主题网络爬虫,该设计提高了网络爬虫对网页资源的抓取速度。实验证明,该网络爬虫具有较高的应用价值。目前,该网络爬虫处在研发初级阶段,还存在一些不足之处,需要通过深入研究而不断完善。期待不久的将来,它在搜索引擎中被广泛应用。