1、搜索引擎研究背景以及现状分析1研究背景2搜索引擎现状分析3网络爬虫的工作原理1研究背景网页是因特网的最主要的组成部份,也是人们获取网络信息的最主要的来源,为了方便人们在大量繁杂的网页中找寻自己需要的信息,这类检索工具发展的最快。一般认为,基于网页的信息检索工具主要有网页搜索引擎和网络分类目录两种。网页搜索引擎是通过“网络蜘蛛”等网页自动搜寻软件搜索到网页,然后自动给网页上的某些或全部字符做上索引,形成目标摘要格式文件以及网络可访问的数据库,供人们检索网络信息的检索工具。网络目录则是和搜索引擎完全不同,它不会将整个网络中每个网站的所有页面都放进去,而是由专业人员谨慎地选择网站的首页,将其放入相应
2、的类目中。网络目录的信息量要比搜索引擎少得多,再加上不同的网络目录分类标准有些混乱,不便人们使用,因此虽然它标引质量比较高,利用它的人还是要比利用搜索引擎的人少的多。但是由于网络信息的复杂性和网络检索技术的限制,这类检索工具也有着明显的不足: 随着网页数量的迅猛增加,人工无法对其进行有效的分类、索引和利用。网络用户面对的是数量巨大的未组织信息,简单的关键词搜索,返回的信息数量之大,让用户无法承受。 信息有用性评价困难。一些站点在网页中大量重复某些关键字,使得容易被某些著名的搜索引擎选中,以期借此提高站点的地位,但事实上却可能没有提供任何对用户有价值的信息。 网络信息日新月异的变更,人们总是期望
3、挑出最新的信息。然而网络信息时刻变动,实时搜索几乎不可能,就是刚刚浏览过的网页,也随时都有更新、过期、删除的可能。网络信息检索工具的发展主要体现在进一步改进、完善检索工具和检索技术,以提高检索服务质量,改变网络信息检索不尽如意的地方。目前虽然有很多种搜索引擎,但各种搜索引擎基本上由三个组成部分: 在互联网上采集信息的网页采集系统:网页采集系统主要使用一种工作在互联网上的采集信息的“网络蜘蛛”。“网络蜘蛛”实际上是一些基于web的程序,利用主页中的超文本链接遍历Web。利用能够从互联网上自动收集网页的“网络蜘蛛”程序,自动访问互联网,并沿着任何网页中的所有URL爬到其它网页,重复这过程,并把爬过
4、的所有网页收集到网页数据库中。 对采集到的信息进行索引并建立索引库的索引处理系统:索引处理系统对收集回来的网页进行分析,提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它网页的链接关系等),根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后建立索引并存人到网页索引数据库中。索引数据库可以采用通用的大型数据库,如Oracle,Sybase等,也可以自己定义文件格式进行存放。为了保证索引数据库中的信息与Web内容的同步,索引数据库必须定时更新,更新频率决定了搜索结果的及时性。索引数据
5、库的更新是通过启动“网络蜘蛛”对Web空间重新搜索来实现的。 完成用户提交查询请求的网页检索器:网页检索器一般是一个在Web服务器上运行的服务器程序,它首先接收用户提交的查询条件,根据查询条件对索引库进行查找并将查询到的结果返回给用户。当用户使用搜索引擎查找信息时,网页检索器接收用户提交的关键词,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。有的搜索引擎系统综合相关信息和网页级别形成相关度数值,然后进行排序,相关度越高,排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。典型的搜索引擎系统如Google就是采用这种策略。信息的飞速增长,使
6、搜索引擎成为人们查找信息的首选工具,Google、百度、中国搜索等大型搜索引擎一直是人们讨论的话题。搜索引擎技术的研究,国外比中国要早近十年,从最早的Archie,到后来的Excite,以及ahvista、overture、google等搜索引擎面世,搜索引擎发展至今,已经有十几年的历史,而国内开始研究搜索引擎是在上世纪末本世纪初。在许多领域,都是国外的产品和技术一统天下,特别是当某种技术在国外研究多年而国内才开始的情况下。例如操作系统、字处理软件、浏览器等等,但搜索引擎却是个例外。虽然在国外搜索引擎技术早就开始研究,但在国内还是陆续涌现出优秀的搜索引擎,像百度、中搜等。随着搜索引擎技术的成熟
7、,它将成为获取信息、掌握知识的利器。但是现有的搜索引擎对于用户所提出的查询要求仅限于关键词的简单逻辑组合,搜索结果重视的是返回的数量而不是质量,在结果文档的组织和分类上也有所欠缺。网络爬虫的效率,直接关系到搜索引擎系统为用户提的供服务质量。如何设计高效、快速的网络爬虫,成为目前网络爬虫研究的热点。要提高网络爬虫的爬行效率,除了需要改进网络爬虫的爬行策略之外,还需要优化网络爬自身的设计,改进网络爬虫自身的结构,消除效率瓶颈。通过对网络爬虫结构、应用环境以及用户要求的分析,提出一个通用网络爬虫的改进设计方案,并通过实验得到较好的测试结果。国外的一次调查结果显示,约有71的人对搜索的结果感到不同程度
8、的失望。因此,如何提高搜索引擎的智能化程度,如何按照知识应用的需要来组织信息,使互联网不仅提供信息服务,而且能为用户提供知识服务,将成为计算机工业界和学术界有待研究的方向。2搜索引擎现状分析互联网被普及前,人们查阅资料首先想到的便是拥有大量书籍的图书馆,而在当今很多人都会选择一种更方便、快捷、全面、准确的方式互联网。如果说互联网是一个知识宝库,那么搜索引擎就是打开知识宝库的一把钥匙。搜索引擎是随着WEB信息的迅速增加,从1995年开始逐渐发展起来的技术,用于帮助互联网用户查询信息的搜索工具。搜索引擎以一定的策略在互联网中搜集、发现信息,对信息进行理解、提取、组织和处理,并为用户提供检索服务,从
9、而起到信息导航的目的。目前搜索引擎已经成为倍受网络用户关注的焦点,也成为计算机工业界和学术界争相研究、开发的对象。互联网的开放性和其上信息广泛的可访问性极大的激励了人们创作的积极性。在短短的十几年间,人类至少在万维网上发布了40亿条的网页,并且现在每天都有数以万计的数量增长。由于网络上的资源与生俱来的数字化、网络化,这些特性成为了网络信息的双刃剑:一方面便于我们搜集整理,另一方面也会使我们感到太多蜂拥而至,无所适从。而搜索引擎的由来要追溯到1990年加拿大的麦吉尔大学,麦吉尔大学的师生为了在分散在FTP资源上找到所需的东西,他们开发了软件Archie。它通过定期搜索并分析FTP系统中存在的文件
10、名信息,提供查找分布在各个FTP主机中文件的服务。当Web风靡全球之后,以Web网页为对象的搜索引擎检索系统产生了。成为人们上网找寻信息的重要手段,通过搜索引擎系统人们可以在浩如烟海的网络中瞬间找到想要找到的信息,并且搜索引擎的智能以及现在网页的特性使得人们只要输入相关的词语就可以找到直接相关的信息。目前较流行的搜索引擎已有Google,Yahoo,Info seek,baidu等,出于商业机密的考虑,目前各个搜索引擎使用的Crawler系统的技术内幕一般都不公开,现有的文献也仅限于概要性介绍。随着Web 信息资源呈指数级增长及Web信息资源动态变化,传统的搜索引擎提供的信息检索服务已不能满足
11、人们日益增长的对个性化服务的需要,它们正面临着巨大的挑战。以何种策略访问Web,提高搜索效率,成为近年来专业搜索引擎网络爬虫研究的主要问题之一。各种讨论搜索的文章、杂志、论文铺天盖地,论坛和博客上也有许多相关帖子。一时间,搜索引擎技术成为最热门的技术之一。3网络爬虫的工作原理网络爬虫是搜索引擎的核心部分,其名称出自Spider 的意译,具有相同词义的词语还有Crawler,robots,bots,wanderer等等。网络爬虫定义有广义和狭义之分,狭义上的定义为利用标准的http 协议根据超级链接和Web 文档检索的方法遍历万维网信息空间的软件程序;而广义则是所有能利用http 协议检索Web
12、 文档的软件都称之为网络爬虫。网络爬虫是一个功能很强的自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。它通过请求站点上的HTML 文档访问某一站点。它遍历Web 空间,不断从一个站点移动到另一个站点,自动建立索引,并加入到网页数据库中。网络爬虫进入某个超级文本时,它利用HTML语言的标记结构来搜索信息及获取指向其他超级文本的URL 地址,可以完全不依赖用户干预实现网络上的自动“爬行”和搜索。搜索引擎使用网络爬虫寻找网络内容,网络上的HTML文档使用超链接连接了起来,就像织成了一张网,网络爬虫也叫网络蜘蛛,顺着这张网爬行,每到一个网页就用抓取程序将这个网页抓下来,将内容
13、抽取出来,同时抽取超链接,作为进一步爬行的线索。网络爬虫总是要从某个起点开始爬,这个起点叫做种子,你可以告诉它,也可以到一些网址列表网站上获取。形象的说,网络爬虫就是一个在网络上乱爬的机器人。当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”其实也就是一段程序,并且它也不是乱爬,而是有一定目的的,并且在爬行的时候会搜集一些信息。例如 Google 就有一大堆爬虫会在Internet上搜集网页内容以及它们之间的链接等信息;又比如一些别有用心的爬虫会在Internet上搜集诸如 foo之类的东西。除此之外,还有一些定制的爬虫,专门针对某一个网站,还有诸如小众软件或者L
14、inuxToy或者酷勤网这样的网站也经常被整个站点crawl下来,换个名字挂出来。其实爬虫从基本原理上来讲很简单,只要能访问网络和分析Web页面即可,现在大部分语言都有方便的Http客户端库可以抓取Web页面,而HTML的分析最简单的可以直接用正则表达式来做,因此要做一个最简陋的网络爬虫实际上是一件很简单的事情。不过要实现一个高质量的 spider 却是非常难的。爬虫的两部分,一是下载Web页面,有许多问题需要考虑,如何最大程度地利用本地带宽,如何调度针对不同站点的Web请求以减轻对方服务器的负担等。一个高性能的Web Crawler系统里,DNS查询也会成为急需优化的瓶颈,另外,还有一些“行
15、规”需要遵循(例如robots.txt)。而获取了网页之后的分析过程也是非常复杂的,Internet 上的东西千奇百怪,各种错误百出的HTML页面都有,要想全部分析清楚几乎是不可能的事;另外,随着AJAX的流行,如何获取由Javascript动态生成的内容成了一大难题。不过,其实并没有多少人需要做像Google那样通用的Crawler,通常我们做一个Crawler就是为了去爬特定的某个或者某一类网站,所谓知己知彼,百战不殆,我们可以事先对需要爬的网站结构做一些分析,事情就变得容易多了。通过分析,选出有价值的链接进行跟踪,就可以避免很多不必要的链接或者Spider Trap,如果网站的结构允许选
16、择一个合适的路径的话,我们可以按照一定顺序把感兴趣的东西爬一遍,这样以来,连URL重复的判断也可以省去。从应用角度来看,广度优先能尽快地比较平均的获取不同网站的内容,比较适合于大型搜索系统初期网页库的建立;深度优先在设计的时候比较容易,对垂直搜索或者站内搜索比较合适。Java提供了多个访问各种标准Internet的协议类库,网络爬虫可以直接用Java的网络开发包.*函数调用来完成。网络爬虫的设计思路是先确定需要下载的网页URL,指定通信端口,创建一个用于网络通信的Socket对象。结果通过流失输出接口输出,创建相应的输出对象。通过输入接口,向Socket对象传入HTTP下载请求。远端的目标Web服务器得到请求后,发送应答消息。本地Socket对象收到消息后缓存并输出,就完成了整个网页下载过程。传输过程中使用默认的HTTP协议进行。 网络爬虫的设计流程中,核心部分是获取等待下载的URL列表、创建下载的客户端、获取并存储得到的网页结果。