基于广度优先搜索的网络蜘蛛设计
【摘要】 网络 蜘蛛搜索策略的 研究 是近年来专业搜索引擎研究的焦点之一,如何使搜
索引擎快速准确地从庞大的网页数据中获取所需资源的需求是 目前 所面临的重要 问题 。
本文重点阐述了搜索引擎的 Web Spider (网络蜘蛛)的搜索策略和搜索优化措施, 提出了一
种简单的基于广度优先算法的网络蜘蛛设计方案,并 分析 了设计过程中的优化措施
【关键词】 搜索引擎; 网络蜘蛛; 搜索策
0 引
近年来,随着 Internet 技术的广泛 应用 ,传统的 通用搜索引擎,如 Google、Fast、Alta
Vista 和 GoTo 等正面临巨大的挑战。挑战之一是 Web 信息资源呈 指数级增长,搜索引擎
无法索引所有页面。据统计, 目前 Web 上静态页面的数量超过 40 亿个,而且这 一数量
还在以平均每天 730 万个页面的速度递增。 在过去的几年中,尽管各种通用搜索引擎在
索引技 术、索引数量上有所提高,但远远无法跟上 Web 本 身的增长速度,即使是目前全
球最大的搜索引擎 Google,其索引的页面数量仅占 Web 总量的 40%; 挑战之二是 Web
信息资源的动态变化,搜索引擎无 法保证对信息的及时更新。近年来的研究表明,Web
上的页面平均 50 天就有约 50%的页面发生变化, 而目前通用搜索引擎更新的时间至少
需要数星期之 久;挑战之三是传统的搜索引擎提供的信息检索服务,不能满足人们日益
增长的对个性化服务的需要。因此如何设计网络蜘蛛(Web Spider)来更有效率的爬 取互联
网上的 内容 成为搜索引擎的一个首要问题。 在设计网络蜘蛛时,不仅需要充分考虑到爬
取的效率和站点设置的灵活性还要确保系统的稳定性。一 个优秀的搜索引擎, 需要不断的
优化网络蜘蛛的算 法, 提升其性能。本文在分析网络蜘蛛的工作原理 的基础上, 提出了
一种基于广度优先搜索算法的网 络蜘蛛的实现,并对提高网络蜘蛛搜索效率的相关看法
由于不可能抓取所有的网页,有些网络蜘蛛对一些不太重要的网站,设置了访问的层数。
[2]例如, 在上图中,A 为起始网页,属于 0 层,B、C、D、 E、F 属于第 1 层,G、H 属
于第 2 层,I 属于第 3 层。如果网络蜘蛛设置的访问层数为 2 的话,网页 I 是不会被访问
到的。这也让有些网站上一部分网 页能够在搜索引擎上搜索到,另外一部分不能被搜索
到。 对于网站设计者来说,扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。
网络蜘蛛在访问网站网页的时候,经常会遇到加密数据和网页权限的问题,有些网页是需
要会员 权限才能访问。当然,网站的所有者可以通过协议 让网络蜘蛛不去抓取(下小节
会介绍),但对于一些出售报告的网站,他们希望搜索引擎能搜索到他 们的报告,但又
不能完全免费的让搜索者查看,这样就需要给网络蜘蛛提供相应的用户名和密码。网 络
蜘蛛可以通过所给的权限对这些网页进行网页抓取,从而提供搜索。而当搜索者点击查看
该网页的 时候,同样需要搜索者提供相应的权限验证
2 网络 蜘蛛的设
根据抓取过程,蜘蛛主要分为三个功能模块, 一个是网页读取模块主要是用来读取远程
Web 服 务器上的网页 内容 ,另一个是超链 分析 模块,这个 模块主要是分析网页中的
超链接,将网页上的所有 超链接提取出来,放入到待抓取 URL 列表中,再一 个模块就是
内容分析模块,这个模块主要是对网页 内容进行分析,将网页中所有超标志去掉只留下
网 页文字内容。蜘蛛的主要工作流程如图所示。首先蜘蛛读取抓取站点的 URL 列表,取
出一个 站点 URL,将其放入未访问的 URL 列表(UVURL 列表)中,如果 UVURL 不为空
刚从中取出一个 URL 判断是否已经访问过,若没有访问过则读取此网页, 并进行超链分
析及内容分析,并将些页存入文档数 据库,并将些 URL 放入已访问 URL 列表(VURL 列
表),直到 UVRL 为空为止,此时再抓取其他站 点,依次循环直到所有的站点 URL 列表
都抓取完为 止。为了提高网络蜘蛛的抓取效率,需要引入以下 技术。(1)、 多线程技
术:由于抓取的站点 URL 相当多,采用单线程蜘蛛抓取时速度不够,也不能满足实 际的
需要。因而需要多线程技术来创建多个蜘蛛线程来同时抓取,以提高速度。(2)、 网页
抓取:网页抓取是基于 HTTP 协议之上的, 网页上的资源有多种,有网页,有 Word 文档
也 有其他类型的文件,这样抓取时需要判断 URL 所指向资源的类型。(3)、 超链分析
:超链分析是一个比较重要的环节,需要对 HTML 的各种标志(tag)有一个很全面 的了
解。需要反复测试,考虑各种情形的发生
超链分析时从网页里提取出来的是相对于当前 页的相对 URL,因而需要根据当前页的绝
对 URL 将提取的这个 URL 转换成绝对 URL。在 此过程中需要根据 ParentURL(就是当前
页的 URL)作出各种判断
3 改进 方法
商业化的蜘蛛需要抓取上亿的网页,因而抓取 速度是一个关键,另外蜘蛛需要自动运行
,尽是减 少人工的参与,因而系统的性能也是一个很重要的 关键,系统能够在发生异常
的时候自动进行处理, 防止程序的退出和死机。[3]有一些细节需要注意
系统应该使用多线程,使用多个蜘蛛同时抓取,在可能的情况下,最好是做成 分布式的
蜘蛛程序,蜘蛛应该分布地网 络上多台服务器上协同抓取网页,这样 速度会更快,更符
合我们的实际 应用
对于同一网站的网页应该采用同一个 HttpConnection 这样有效地节省创建一 个连接的时
间,另外对于抓取的 URL 采用域名缓冲机制(可在网关一级上实 现),这样抓取时减少
由域名到 IP 地 址的转换时间以及重复的域名转换。若 能做到这一步将会大大减少抓取
时间, 因为访问一 URL 时每次都要进行域名 到主机 IP 地址的转换
最好是能够将读取网页、超链分析及网 页内容分析三部分分开来做,让它们并 行协同工
作,这样效率会更高。因为在这三个过程中网页读取比起其他两个 功能来说是一个长任
务,最耗时间。当抓取完一网页后,在抓取下一网页的时候让去执行超链分析和内容分析
。这样 在下一网页抓取完成之前超链分析和 内容分析任务就能完成,抓取任务不会 延迟
,这样节省了一些时间
4 结束
随着人们对“个性化”信息服务需要的日益增 长,专业搜索引擎的 发展 将成为搜索引擎发
展的主 要趋势之一。[4]网络蜘蛛搜索策略 问题 的 研究 ,对 专业搜索引擎的应用与发展
具有重要意义。本文对 现有的网络蜘蛛搜索策略进行了简单的介绍和分 析,提出了一种
基于广度优先搜索网络蜘蛛设计方 案。提出了提高网络蜘蛛效率的几种方法。 目前 的 网
络蜘蛛通常采用“固定的”搜索策略,缺乏适应性,如何提高网络蜘蛛的自适应性有待进一
步研究。 总之,网络蜘蛛搜索策略问题的研究还处于发展阶 段,无论是模型、搜索算法
,还是实验方法都还
许多有待解决的问题