`
阅读更多
爬虫技术研究综述(2010-01-22 13:03:14)
转载标签:杂谈 
1 爬虫技术研究综述
引言
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:

(1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2) 通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3) 万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频/视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4) 通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(generalpurpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。 www.majia.net

1 聚焦爬虫工作原理及关键技术概述
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件,如图1(a)流程图所示。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止,如图1(b)所示。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1) 对抓取目标的描述或定义;
(2) 对网页或数据的分析与过滤;
(3) 对URL的搜索策略。
抓取目标的描述和定义是决定网页分析算法与URL搜索策略如何制订的基础。而网页分析算法和候选URL排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法又是紧密相关的。




2 抓取目标描述
现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为:
(1) 预先给定的初始抓取种子样本;
(2) 预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;
(3) 通过用户行为确定的抓取目标样例,分为:
a) 用户浏览过程中显示标注的抓取样本;
b) 通过用户日志挖掘得到访问模式及相关样本。
其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。
现有的聚焦爬虫对抓取目标的描述或定义可以分为基于目标网页特征,基于目标数据模式和基于领域概念三种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。具体的方法根据种子样本的获取方式可以分为:(1)预先给定的初始抓取种子样本;(2)预先给定的网页分类目录和与分类目录对应的种子样本,如Yahoo!分类结构等;(3)通过用户行为确定的抓取目标样例。其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。

2 爬虫技术研究综述
基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。另一种描述方式是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度。


3 网页搜索策略
网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。
3.1 广度优先搜索策略
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。

3.2 最佳优先搜索策略
最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经过网页分析算法预测为%26ldquo;有用%26rdquo;的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。将在第4节中结合网页分析算法作具体的讨论。研究表明,这样的闭环调整可以将无关网页数量降低30%~90%。

4 网页分析算法

网页分析算法可以归纳为基于网络拓扑、基于网页内容和基于用户访问行为三种类型。


如何有效地从网页中提取链接,并下载数据。
用好BeautifulSoup,应该可以带来很大的便捷。不过如何过滤无效的链接,和尽量提取有效的链接呢?
soup = BeautifulSoup(doc) //初始化BeautifulSoup对象
soup.findAll(’a') // 可以对各种属性进行查找, 是对这种标签进行查找?

<input type=”text” name=”keytext” size=”12″ style=”margin-top:10px;” />
<input type=”submit” value=”GO!” style=”margin-top:10px;” />
// 确实如此,若输入为soup.findAll(’input’),输出如前面所示。

就爬虫技术而言,最重要的当然是对链接的提取:<a href=…>AnchorText</a>,如何处理各种不同的url呢?这里的url可能是相对路径,或者是绝对路径,或者是网页内的链接(现在暂时还用不到这些信息,但是在提取页面特征的时候,这些页面内部的链接也是可以发挥作用的)

解析一个网页中的所有<a href> ,拿到href并不难,之后判断哪些是相对链接,哪些是绝对链接,哪些仅仅是参数。这些才是最重要的。

我要做的第一个爬虫要从一个网站下载软件包,它的HTML格式很规范化,以下是解析某个HTML文件说返回链接的格式:
?C=D;O=A
/pub/ 这个是上一级目录
CPAN/ 这个链接居然不是标准格式: 爬虫需要考虑的情形太多了
如何提取链接是一门学问。 终不能从一个二进制文件里提取链接吧? 这个如何做到? 有文件类型库? 和文件类型识别器吗?

在链接的提取过程中,遇到一个标签,但是里面没有超链接。。。 // HTML很多情形都要考虑,还是很复杂的呵呵。

<a title=”section_1″ name=”section_1″></a>Release Notes of Apache Ant 1.7.1 在取标签的属性值之前,需要判断标签是否具有该属性?
raise socket.error, msg
IOError: [Errno socket error] (10060, ‘Operation timed out’) 爬行过程出错,还有可能是因为网络问题。 如何有效地处理这种问题呢?
没有href的问题现在已经解决,在find的时候,可以加入一个参数soup.findAll(’a', href=True) 这样如果没有href属性,这个链接就不会被返回。
爬虫的稳定性和容错性是至关重要的。刚刚解决中文编码问题,现在BeautifulSoup又出问题了。也是编码错误?这些现成工具用不了,难道要自己用最基本的Python编程来解决问题吗?
刚才看到一篇博客,是用于抓取Google论文统计的,他说很快就放弃了使用BeautifulSoup,而改用re。
浏览器的容错性真的是很强大。用现成的工具,做网页分析,并不是一件简单的事情啊。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics