面向主题的网络爬虫系统功能模块设计探析

2017-07-27 09:29牛率仁
电脑知识与技术 2017年11期
关键词:网络爬虫功能模块设计

牛率仁

摘要:爬虫策略是主题爬虫的核心模块,其策略的目的在于高效的抓取到更多与主题相关的页面,同时又过滤与主题无关的页面。该文主要对面向主题的爬虫项目需求进行研究,提出了分层的系统框架,并详细介绍了框架架构以及各个模块的设计,最后给出系统的运行结果截图,初步达到了预期的效果。

关键词:网络爬虫;功能模块;设计

主题的相关性是非常核心的模块,它决定了抓取到网页是否与主题相关,抓取到网页质量好坏等,可以说主题的相关性算法决定了面向主题网络爬虫的好坏,下面简单介绍一下各个模块的设计。

1页面爬取模块设计

当前的主题网络爬虫主要有基于内容的Fish-Search,Shark-Search策略,以及基于链接分析的PageRank方法,HITS算法等。

在这些算法的核心思想中,它们总是倾向于抓取有较高相关度页面下的链接页面,然后直接丢掉相关度较低的页面,這样导致的一个问题就是爬虫会在一个局部的范围内跳转,无法覆盖多的页面。抓取的深度的不够,无法覆盖更多的信息,而且其没有考虑链接的权重的不同,导致爬虫的效率比较低下。

1.1隧道问题

通过我们对以上的爬虫搜索策略算法的分析指出,对于与主题相关的网页主要的爬取页面的来源,而对于与主题无关的网页,一般会选择丢弃。从总体来说,这种策略能够迅速的抓取到与主题相关的页面,但是其存在的一个风险就是,可能会间接丢弃大量与主题相关的页面。

隧道现象会导致召回(recall)不够理想,无法满足信息的覆盖程度,对应垂直搜索引擎来说,可能会导致信息没法全面收集的问题,无法完全满足用户的需求。因此,如何在保证页面相关度的情况下,高效的抓取到更多与主题相关的页面是当前的研究重点。

1.2站点权重问题

基于链接分析的搜索策略中,根据考虑了各个链接的,该算法给所有的网页的页面设计了一个权值,作为该页面的重要性的衡量。一般情况下都需要抓取足够量的网页以后,该权值才能客观的反应该页面权重。

传统的爬虫策略中并没有考虑站点或者子域名的级别特性,这样有可能导致的问题,爬虫程序没法聚焦抓取相关主题的网页。

2页面搜索模块设计

2.1算法思想改进

通过分析现在爬虫策略算法的思想,以及存在覆盖率不足的问题,结合内容以及链接分析提出一种高效的算法,通过改善当前爬虫策略中存在的覆盖度不够的问题,高效的抓取更多的与主题相关的页面。下面讲述我们改进后爬虫搜索策略,在的算法主要解决两个问题:1)隧道问题,2)如何抓取到更多与主题相关的页面。

2.1.1隧道问题

我们以search-fish的算法思想作为基础,通过引进设定深度阈值D,给予主题低相关度或者没相关的页面的链接一定的深度访问机会,来解决隧道问题。

我们给初始的节点设置一个初始的深度阈值D,同时设定一个相关度阈值T,如果页面i相关度relate大于T,则该页面的链接将会的深度阈值会提升,也就是说,后续从该页面的链接出去的链接有更大的空间允许其链接到不相关的页面;

相反如果如果页面i相关度relate低于T,则该页面的链接将会的深度阈值会降低,从该页面的解析出去的链接有能够链接到不相干的页面深度则会降低,尽管如此,但是仍然有机会能够穿越隧道,找到隐藏在后面的网页信息。

2.1.2抓取引进站点的质量评价指标

权重表本质上就是衡量该站点(子站点)与主题相关程度,如果该站点与主题越相关,下一次遇到该站点相关页面,那么我们的算法会给该页面有更优先的爬取权重。同时我们借鉴了链接的分析方法,我们仍认为一个站点的质量同时也决定了该站点下的网页的质量,通过给了网站一定的置信值,确保不同站点有不同的衡量置信区间,因此可以保证在数据冷启动的时候,爬取策略就有了一定的区分度。

在爬虫搜索算法策略中,包括:①初始化设计URL列表种子;②设计站点列表权重;③设计改进搜索策略算法。

2.2初始化URL列表种子

URL种子搜集的目的在于给定主题的情况下,尽可能的爬取到高质量的URL种子。URL种子是整个爬取过程的起始点,因此这些种子的质量跟数量决定了接下来的整个爬虫性能表现。在文献认为,一个相关主题页面所包含的链接比一般的链接更加呈现相关性。因此种子初始化对整个爬虫效果有着极为重要的意义。

一般来说,初始化的种子集合就是主题爬虫启动时候使用抓取的页面。

初始种子集是面向领域主题爬虫爬取主题页面开始遍历链接的集合,好的初始化种子集合可以大大的提升总体爬虫的准确率以及效率,因此一般情况下,都会选取比较知名的大型网站,这样可以保证信息足够丰富,更容易抓取到优质的资源。

目前常用的方法有采用人工方法,收集网络上某个主题的链接,比如从门户网站的各个网站,另外包括一些垂直的网站。

在则使用了半自动化的方式产生初始化列表种子,使用的方法如下:

1)使用与主题相关keyword发送到百度或者谷歌搜索引擎中,然后抓取topK的页面,对这些页面的链接进行解析,提取该页面的站点,值得注意的是,在对这些站点保留到子域名。比如新浪网站下面有很多栏目,比如体育,新闻,女性等等,因此对于我们的主题爬虫,是希望保留到至少二级目录一下的,比如对于这样的http://sports.sina.com.cn/g/premierleague/链接,我们保留的起始站点是sports.sina.com.cn,而不是sina.com.cn;

2)另外人工从导航站点中抓取一批质量较好的垂直网站作为补充的一种重要方式,比如haol23.baidu.oom等导航站点。

2.3建立站点级别的权重表

站点权重表就是由一批主题相关的抓取站点所构成的表,同时这张表要支持快速的查询以及更新,因此在本算法中,使用哈希表存储权重表。

权重表本质上就是衡量该站点(子站点)与主题相关程度,如果该站点与主题越相关,下一次遇到该站点相关页面,那么我们的算法会给该页面有更优先的爬取权重。

同时我们借鉴了链接的分析方法,我们仍认为一个站点的质量同时也决定了该站点下的網页的质量,通过给了网站一定的置信值,确保不同站点有不同的衡量置信区间,因此可以保证在数据冷启动的时候,爬取策略就有了一定的区分度。

哈希表也叫散列表,其将某个key值映射到哈希表中的存储位置,实现数据快速查询访问。哈希表结合了链表及数组的优点,在软件设计领域有着极为重要的应用。如果哈希表设计合理的话,可以在(1)的时间复杂度内实现数据的快速查找。哈希表设计的关键在于找到一个好的散列函数,使散射地址足够分散,最大程度的避免碰撞的发生。

2.4链接的rank

在页面的链接中,往往都包含了锚文本以及链接信息,其本质用简短的语言对该链接进行描述。

我们以图1的新浪体育的页面为例,其中每个文本下面都是链接信息,因此在中,我们针对锚文本计算了与主题的相关度,从而避免了在同个页面下,无法区分出各个链接的权重的问题。

3主题相关性计算模块设计

向量空间模型fVectorSpaceModels)虽然将网页表示成key-word的空间向量,大大简化了计算的复杂度,算法实现简单,因此得到了大规模的应用,在考虑实际的需求以后,沿用向量空间模型作为主题相关性算法,根据我们的研究发现,该算法主要存在以下的问题:

1)向量空间模型只考虑了词频信息,它认为页面的词语对该文的主题的影响都是独立的,而且其认为一个网页中词语的顺序并不重要,而只与词频有关系。而向量空间模型的TF-IDF计算法方法只考虑了keyword的频次信息,没有考虑位置因素,因此在表征主题信息上是有一定的缺陷的。

2)词性问题,根据我们的常识,在一篇文章中,我们会发现形容词跟名词更能表达文章的主题,比如“篮球”,“足球”,“踢球”对应体育类,而形容副词则对主题的意义不是很大,如“很多”,“好不好”,则很难表达什么主题,因此假如能够知道每个keyword的词性,那边我们便可以通过给不同点词性增加不同的权重,这样让主题识别更准确。

3)效率问题,在传统的向量空间模型中,一个keyword就是一个维度,如果一篇文章有几万个词,就有几万维,采用余弦定律计算页面与主题的相关度,则在效率上存在较大的问题,因此可以通过剔除一些停留词降低维度。

猜你喜欢
网络爬虫功能模块设计
瞒天过海——仿生设计萌到家
设计秀
有种设计叫而专
炼铁厂铁量网页数据获取系统的设计与实现
输电线路附着物测算系统测算功能模块的研究
M市石油装备公服平台网站主要功能模块设计与实现
功能模块的设计与应用研究
设计之味