毕业设计(论文)-搜索引擎的设计与实现.doc_第1页
毕业设计(论文)-搜索引擎的设计与实现.doc_第2页
毕业设计(论文)-搜索引擎的设计与实现.doc_第3页
毕业设计(论文)-搜索引擎的设计与实现.doc_第4页
毕业设计(论文)-搜索引擎的设计与实现.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学毕业设计(论文)用纸搜索引擎的设计与实现摘要网络中的资源非常丰富,然而如何有效的搜索讯息却是一件困难的事情。创建搜索引擎就成了解决这个问题的最佳方法。本文起首详明介绍了基于英特网的搜索引擎的系统构造,继而从网络机器人、索引引擎、Web服务器三个方面进行详细的说明。为了更加深入的理解这种技术,本人还亲自完成了一个自己的搜索引擎简易搜索引擎。简易搜索引擎是从指定的Web页面中依照超链接进行解析、搜索,并把搜索到的每条信息进行索引后加入数据库。继而通过Web服务器承接客户端请求后从索引数据库中搜索出所匹配的讯息。本人在介绍搜索引擎的章节中除具体的论述技术核心外还结合了简易搜索引擎的实现代码来说明,图文并茂、易于理解。关键词:网络机器人;搜索引擎;服务器全套设计加扣 3012250582iThe design and implementation of a search engineAbstractThe resources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introduces the system structure of search engine based on the internet in detail, then gives a minute explanation form Spider search, engine and web server. In order to understand the technology more deeply, I have programmed a news search engine by myself.The news search engine is explained and searched according to hyperlink from a appointed web page, then indexs every searched information and adds it to the index database. Then after receiving the customers requests from the web server, it soon searchs the right news form the index engine.In the chapter of introducing search engine, it is not only elaborate the core technology, but also combine with the modern code,pictures included, easy to understand.Key Words: spider;webSearch;Serverii目录摘要iAbstractii1 引言12 开发语言及开发环境32.1 Java语言32.1.1 平台无关性32.1.2 安全性32.1.3 面向对象32.1.4 分布式32.1.5 健壮性32.2 开发环境42.3 编译环境简述43 项目可行性分析53.1 分析方法概述53.2 评价尺度53.3 具体项目分析53.3.1 经济可行性53.3.2 技术可行性53.3.3 操作可行性54 项目需求分析64.1 OOA方法介绍64.2 功能需求64.3 性能需求64.4 环境需求74.5 可靠性需求74.6 用户界面需求74.7 软件成本消耗与开发进度需求74.8 条件假定和限制75 总体设计概要85.1 系统概述85.2 功能模块设计85.2.1 网络机器人85.2.2 索引与搜索95.2.3 Web服务器105.3 搜索引擎的主要指标及分析105.4 小节116 详细设计概要126.1 网络机器人设计126.1.1 网络机器人概述126.1.2 网络机器人的结构分析126.1.3 解析HTML136.1.4 Spider程序结构166.1.5 程序性能提高论述176.1.6 Spider程序综述176.2 索引设计176.2.1 Lucene全文检索176.2.2 Lucene的原理分析186.2.3 索引建立综述246.3 服务器的设计和部署246.3.1 基于Tomcat的Web服务器246.3.2 用户接口设计256.3.3 部署WEB应用286.3.4 服务器部署综述297 软件测试307.1 测试的目的307.2 测试方法307.3 部分测试用例317.3.1 系统启动测试317.3.2 搜索测试317.4 测试分析和总结31结论33参考文献34致谢35英文原文36中文翻译431 引言面对巨大的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索动身抵达自己想去的网络中的任何一个地方。因此它也成为除电子邮件之外最多人使用的网络服务。搜索引擎技术伴随着WWW的成长是有目共睹的。搜索引擎已经经历了三代的更新发展:第一代搜索引擎呈现于1994年。这类搜索引擎一般都索引少于1,000,000个网页,很少从新搜集网页并去刷新索引。并且其检索速率非常慢,正常都要等待10秒乃至更长的时间。在实现技术上也基本使用比较成熟的IR(Information Retrieval)、网络、数据库等技术,相当于使用一些已有技术实现的一个WWW上的应用。在1994年3月到4月,网络爬虫World Web Worm (WWWW)平均每天担当大约1500次查询。大约在1996年涌起的第二代搜索引擎系统大多选用分布式解决方案(多个微型计算机协同工作)来提高数据规模、响应速率和用户数量,它们一般都维持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户索引请求。1997年11月,当时最先进的几个搜索引擎堪称能创建从2,000,000到100,000,000的网页索引。Altavista搜索引擎宣称他们每天大抵要承受20,000,000次查询。2000年搜索引擎大会上,依照Google公司总裁Larry Page的演讲,Google正在使用3,000台运行Linux系统的个人电脑在搜集Web上的网页,并且以每天30台的速率向这个微机集群里添加计算机,以维持与网络的发展相同步。每台微机运行多个爬虫程序搜集网页的峰值速率为每秒100个网页,平均速率为每秒48.5个网页,每天可以搜集超过4,000,000网页。搜索引擎一词在国内外因特网领域被普遍使用,但是它的含义却不尽肖似。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序搜集上千万到几亿个的网页,而且每个词都被搜索引擎索引,也就是我们通常说的全文检索。著名的因特网搜索引擎有First Search、Google、HotBot等。在中国,搜索引擎通常指基于网站目录的索引服务或是特定网站的索引服务,本人这里研究的是基于因特网的索引技术。搜索引擎的起源点是1990年由Montreal的McGill University三名学生(Alan Emtage、Peter Deutsch、Bill Wheelan)发明的Archie(Archie FAQ)。Archie是第一个自动索引互联网上匿名FTP网站文件的程序,但它还不是真正的搜索引擎。Archie是一个可搜索的FTP文件名列表,用户必须输入精确的文件名搜索,然后Archie会告诉用户哪一个FTP地址可以下载该文件。1994年4月,斯坦福大学(Stanford University)的两名博士生,美籍华人Jerry Yang(杨致远)和David Filo共同创办了Yahoo!。随着访问量和收录链接数的增长,Yahoo目录开始支持简单的数据库搜索。因为Yahoo!的数据是手工输入的,所以不能真正被归为搜索引擎,事实上只是一个可搜索的目录。1994年初,华盛顿大学(University of Washington)的学生Brian Pinkerton开始了他的小项目WebCrawler。WebCrawler是互联网上第一个支持搜索文件全部文字的全文搜索引擎,在它之前,用户只能通过URL和摘要搜索,摘要一般来自人工评论或程序自动取正文的前100个字。1994年7月,卡内基梅隆大学(Carnegie Mellon University) 的Michael Mauldin将John Leavitt的spider程序接入到其索引程序中,创建了Lycos。除了相关性排序外,Lycos还提供了前缀匹配和字符相近限制,Lycos第一个在搜索结果中使用了网页自动摘要。1995年,一种新的搜索引擎形式出现了元搜索引擎(A Meta Search Engine Roundup)。用户只需提交一次搜索请求,由元搜索引擎负责转换处理,提交给多个预先选定的独立搜索引擎,并将从各独立搜索引擎返回的所有查询结果,集中起来处理后再返回给用户。第一个元搜索引擎,是Washington大学硕士生 Eric Selberg 和 Oren Etzioni 的 Metacrawler。1995年12月,DEC的正式发布AltaVista。AltaVista是第一个支持自然语言搜索的搜索引擎,第一个实现高级搜索语法的搜索引擎(如AND、OR、NOT等)。用户可以用AltaVista搜索新闻组(Newsgroups)的内容并从互联网上获得文章,还可以搜索图片名称中的文字、搜索Titles、搜索Javaapplets、搜索ActiveX objects。1998年10月之前,Google只是斯坦福大学(Stanford University)的一个小项目BackRub。1995年博士生Larry Page开始学习搜索引擎设计,于1997年9月15日注册了的域名,1997年底,在Sergey Brin和Scott Hassan、Alan Steremberg的共同参与下,BachRub开始提供Demo。1999年2月,Google完成了从Alpha版到Beta版的蜕变。Google公司则把1998年9月27日认作自己的生日。Google以网页级别(Pagerank)为基础,判断网页的重要性,使得搜索结果的相关性大大增强。Google公司的奇客(Geek)文化氛围、不作恶(Dont be evil)的理念,为Google赢得了极高的口碑和品牌美誉。2000年1月,两位北大校友,超链分析专利发明人、前Infoseek资深工程师李彦宏与好友徐勇(加州伯克利分校博士后)在北京中关村创立了百度(Baidu)公司。2001年8月发布B搜索引擎Beta版(此前Baidu只为其它门户网站搜狐、新浪、Tom等提供搜索引擎),2001年10月22日正式发布Baidu搜索引擎,专注于中文搜索。随着技术的进步,搜索引擎的功能有了长足的发展,相信随着时代的进步,下一代智能搜索引擎即将进入人们的视界。352 开发语言及开发环境2.1 Java语言2.1.1 平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(Java Virtual Machine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口。 2.1.2 安全性Java的编程类似C+,学习过C+的开发者能够很快掌握Java的精髓。Java舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。 2.1.3 面向对象Java 吸取了C+面向对象的概念,将数据封装于类中,利用类的优点实现了程序的简洁性以及便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java 提供了众多的一般对象的类,通过继承即可使用父类的方法。在 Java 中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java 提供的Object 类及其子类的继承关系如同一棵倒立的树形,根类为 Object 类,Object 类功能强大,经常会使用到它及其它派生的子类。 2.1.4 分布式Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 2.1.5 健壮性Java致力于检查程序在编译和运行时的错误,类型检查帮助检查出许多开发早期出现的错误,Java自己操纵内存减少了内存出错的可能性,Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。2.2 开发环境 图2-1 Java开发环境图Java开发环境图如图2-1所示,图中表示出Java拼图游戏软件的开发环境、具体的目录存放以及操作环境等。其中建议使用的操作系统为Microsoft Windows XP,程序开发语言为Java,下面是JDK的安装步骤以及配制方法的简单介绍。JDK下载、安装及配置:JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment),一堆Java工具和Java基础的类库(rt.jar)。第一步:下载jdk-6u23-windows-i586,Eclipse Indigo;第二步:安装下载好的JDK是一个可执行安装程序,执行安装即可;第三步:设置环境变量打开“我的电脑属性高级环境变量系统变量”,设置以下三个变量:JAVA_HOME= Path=;Java虚拟机的ClassLoader会按照CLASSPATH设定的路径搜索class文件。2.3 编译环境简述 MyEclipse企业级工作平台(MyEclipseEnterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。3 项目可行性分析3.1 分析方法概述通过研究分析网络搜索引擎所具备的能力及实现的方法来确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级搜索引擎软件。3.2 评价尺度由于本软件是一个初级产品,对其要求不是太苛刻,所以能够保证达到搜索引擎的一般功能。3.3 具体项目分析3.3.1 经济可行性由于本搜索引擎是毕业设计,不过分强调直接的经济效益和其日后的发展方向,只在注重自身水平和能力的提高,同时对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以基本上不用考虑到经济问题。3.3.2 技术可行性可用与本搜索软件的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择Java作为编程语言。需要对变量定义、变量初始化、界面初始化、数据传递、然后数据处理中的各种操作。3.3.3 操作可行性本程序的开发作为毕业设计,目的在于巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑社会影响,不用考虑法律、版权等社会因素,且此软件的开发不触犯法律,所以在这方面是完全可行的。4 项目需求分析4.1 OOA方法介绍面向对象的分析方法(OOA),是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤: 第一步,确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。 第二步,确定结构(structure)。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。 第三步,确定主题(subject)。主题是指事物的总体概貌和总体分析模型。 第四步,确定属性(attribute)。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。 第五步,确定方法(method)。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。4.2 功能需求用户对于该搜索引擎的需求主要体现在以下几个功能:1) 实现程序用户数据交互界面;2) 实现客户端数据的传入;3) 实现数据插入数据库;4) 实现数据索引的建立;5) 实现后台数据处理;6) 实现后台处理后数据传出。4.3 性能需求要求该软件达到以下指标:1) 保证软件可靠性性;2) 保证软件高效性;3) 保证软件准确性。4.4 环境需求操作系统可以有以下几种:Win XP/Win Vista/Win 7。硬件要求:奔腾四处理器,主频2.0GHz,512M以上内存。4.5 可靠性需求要保证该搜索引擎程序的稳定性,要在完成程序设计后进行程序稳定性测试,检测出该程序发生故障的概率。4.6 用户界面需求利用jsp技术和css技术对该程序的客户端界面进行设计与实现,实现用户友好的界面风格,做到界面设计简洁大方,时尚新颖,适合各类用户群体使用。4.7 软件成本消耗与开发进度需求由于该软件只作为毕业设计,用于考察学生对于jsp技术的理解与应用能力,并未涉及软件的市场推广等工作,且开发该软件不需付费,属于零成本,所以暂不用考虑软件的成本消耗。开发进度严格遵守任务书中的毕业设计(论文)进度计划。4.8 条件假定和限制由于本软件目前是基础版本,未做到尽善尽美。如果用户需要提高版本,本软件需要根据使用者者的要求进行进一步的修改。5 总体设计概要5.1 系统概述搜索引擎是指按照特定的策略、使用特定的电脑程序从互联网上收集讯息,在对信息进行构造和处理后,为用户提供方便的检索服务,将用户检索担的相关信息呈现给用户的系统。为了保障用户查找信息的精度和新鲜度,搜索引擎要求建立并维护一个巨大的索引数据库。一般的搜索引擎由网络机器人程序、索引与搜索程序、索引数据库等几部分组成。搜索引擎系统结构如图5-1所示。WWW文档网络机器人程序url数据库从Lucene中搜索信息Tomcat服务器Lucene索引数据库WWW浏览器WWW浏览器JSP网络机器人程序图5-1 系统结构图5.2 功能模块设计5.2.1 网络机器人网络机器人也称为“网络爬虫”(Spider),是一个功能强大的WEB扫描程序。它为搜索引擎从万维网上下载网页,是搜索引擎的重要构成部分。爬虫从一个或多个初始网页的URL入手,取得初始网页上的URL,在抓取网页的过程当中,不断的从当前页面上抽取新的URL放入队列,直到满足系统的特定停止条件。由于WEB中广泛使用超链接,所以一个网络爬虫程序理论上可以访问全部WEB页面。为了保障网络机器人遍历讯息的广度和深度要求设定一些重要的链接并制定相关的扫描组织策略。网页搜索策略网页的抓取策略可以分为深度优先、广度优先和最佳优先三种策略。深度优先在大多情况下会导致爬虫程序的陷入(trapped)问题,现在常用的是广度优先和最佳优先策略。1) 广度优先搜索策略广度优先索引策略是指在抓取过程当中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。现在,为覆盖尽可能多的网页,一般使用广度优先搜索算法。也有许多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思路是认为与初始URL在一定链接间隔内的网页具有主题相关性的几率很大。另外一种方法是将广度优先搜索与网页过滤技术相结合使用,先用广度优先策略抓取网页,再将其中无关的网页通过技术过滤掉。这些方法的缺点在于,随着抓取网页的增加,大批量的无关网页将被下载并过滤,算法的运行效率将变低。2) 最佳优先搜索策略最佳优先搜索策略依照特定的网页分析算法,预测出候选URL与目标网页的相关度,或与主题的相关性,并选取评价最佳的一个或多个URL进行抓取。它只访问由网页分析算法判断为“有用”的网页。这样存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,由于最佳优先策略是一种局部最优搜索算法。所以需要将最佳优先算法结合具体的应用进行改良,以跳出局部最优点缺陷。3) 深度优先搜索策略深度优先搜索策略从初始网页入手,选择一个URL进入,分析当前网页中的URL,选择一个再次进入。如此一个链接一个链接地抓取下去,直到处理完一条路线之后再处理下一条路线。深度优先策略设计较为简单。但是门户网站提供的链接往往最具价值的,PageRank也很高,但是每深入一层,网页价值和PageRank都会相应地有所降低。这暗示着重要网页讯息通常距离种子较近,而过度深入抓取到的网页却价值很低廉。同时,这一策略抓取深度直接影响着抓取命中率和抓取效率,而抓取深度是该种策略的关键。相对于其他两种策略而言。此种策略较少被使用。5.2.2 索引与搜索索引作为一种数据结构,容许用户快速并随机的访问存储在当中的词。与字典的目录相似,某个词对应到某一页,查询的时候直接定位到该页,速度就非常之快,不用一页一页的查找。在索引中搜索关键词,寻找到包含关键词的文档的过程就是搜索。搜索的质量通常用准确率和召回率来描述。所谓召回率是指一次搜索结果集合当中符合用户需求的数目与和用户查询相关的总数之比;而准确率是指一次搜索结果集合当中符合用户需求的数目与该次搜索结果总数之比。我们也需要考虑其它的相关搜索因素,比如速度和快速搜索大量文本的能力,单个和多个查询、 短语查询、 通配符查询、 结果的排名和排序的支持等等。网络机器人将遍历得到的全部页面存储在临时数据库中,若是通过SQL直接查询信息,速度将会令人难以忍受。为了提高检索速率,需要对数据建立索引,按照倒排文件的格式存放。若是索引不及时更新的话,用户用搜索引擎也不能及时检索得到。用户输入相应搜索条件后,索引程序将通过索引数据库的方式进行检索,然后将符合查询要求的数据按照一定的策略进行分级排放,然后再返回给用户。5.2.3 Web服务器Web服务器是能够向发请求的浏览器提供文档讯息的计算机程序。Web服务器是一种被动程序:只有当运行在Internet上的计算机中的浏览器发出请求时,Web服务器才会做出响应。Web服务器是指驻留于因特网上的某种类型的计算机程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求然后将相关文件反馈到该计算机的浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交互。Web服务器的工作原理不是很复杂,正常可分成如下4个步骤:连接过程、请求过程、应答过程以及关闭连接过程。下面来对这4个过程作一个简要的介绍。连接过程指的是Web服务器和计算机浏览器之间所建立起来的一种连接。查看连接过程是否已实现,用户可以找到并打开socket这个虚拟文件,这个文件的创建意味着连接过程这一步骤已经成功完成。请求过程指的是Web的浏览器运用socket这个文件向相连接服务器提出各种请求。应答过程指的是运用HTTP协议把在请求过程中所提出来的请求数据传输到Web服务器,从而实施相应的任务处理,然后运用HTTP协议再把任务处理的结果传输到计算机的浏览器,同时在用户浏览器上面呈现上述请求之结果。关闭连接就是当上一个步骤-应答过程完成之后,Web服务器和其浏览器之间断开相应连接之过程。Web服务器上述4个步骤紧密相联,环环相扣,逻辑性强;可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。客户通常使用浏览器进行相关查询,这就要求系统提供Web服务器而且必须和索引数据库进行连接。客户在浏览器中输入查询条件,Web服务器接收到客户传来的查询条件后在索引数据库中进行相应查询、排列然后返回到客户端。5.3 搜索引擎的主要指标及分析主要的搜索引擎指标有响应时间、召回率、准确率、相关性等。这些指标好坏直接决定了搜索引擎的好坏。搜索引擎的技术指标决定了搜索引擎的评估指标。好的搜索引擎是指具有较快的反应速度和较高的召回率、准确率等,当然这最终都需要搜索引擎技术指标来保障。召回率(Recall Rate,也叫查全率):是索引出的相关文档数和文档库中所有的相关文档数的比值,重在衡量检索系统的查全率。准确率:一次搜索结果中符合用户需求的数目与该次搜索结果的总数之比。相关度:用户查询与搜索结果之间相似度的一种度量。精确度:对搜索结果的排序分级能力和对垃圾网页处理的抗干扰能力。5.4 小节以上是基于因特网的搜索引擎结构和性能指标的分析,本人在这些研究的基础上利用JSP,Servlet技术和Apache的Lucene开源工具包实现了一个简易的搜索引擎。在接下来的章节中将会就本人的设计进行具体的论述。6 详细设计概要6.1 网络机器人设计6.1.1 网络机器人概述网络机器人又称为Spider程序,是一种专业的Bot程序。用于查找大量的Web页面。它从一个简单的Web页面上开始运行,然后通过其上的超链接再访问其他页面,这样反复理论上能够扫描网络上的所有页面。网络蜘蛛即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。对于搜索引擎来说,要抓取互联网上所有的网页几乎是不可能的,从目前公布的数据来看,容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。这其中的原因一方面是抓取技术的瓶颈,无法遍历所有的网页,有许多网页无法从其它网页的链接中找到;另一个原因是存储技术和处理技术的问题,如果按照每个页面的平均大小为20K计算(包含图片),100亿网页的容量是1002000G字节,即使能够存储,下载也存在问题(按照一台机器每秒下载20K计算,需要340台机器不停的下载一年时间,才能把所有网页下载完毕)。同时,由于数据量太大,在提供搜索时也会有效率方面的影响。因此,许多搜索引擎的网络蜘蛛只是抓取那些重要的网页,而在抓取的时候评价重要性主要的依据是某个网页的链接深度。基于因特网的搜索引擎是网络爬虫程序的最早应用。例如国内搜索巨头百度公司,就利用网络机器人程序来遍历Web站点,以建立并维护这些大型的数据库。网络机器人程序也能够通过扫描Web站点的主页来得到该站点的文件清单和层次机构。也可以扫描出中断的超链接和拼写错误等。6.1.2 网络机器人的结构分析Internet是建立在许多相关协议基础上的,而且更复杂的协议又是建立在系统层协议之上。网络就是建立在HTTP ( Hypertext Transfer Protocol ) 协议基础上,而HTTP又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 协议之上,它同时也是一种Socket协议。所以网络爬虫程序本质上是一种基于Socket的网络程序。6.1.3 解析HTML因为网络中的讯息都是建立在HTML协议之上的,所以网络爬虫在索引网页时的第一个问题就是如何解析HTML文件。我们在进行解析的时候不用关心全部的标签,只需要对其中几种关键标签进行解析即可。超连接标签超连接定义了WWW通过互联网链接文档的功能。它们的主要功能是使用户能够任意迁移到相关页面,这就是网络爬虫程序最关心的标签。TITLE标签标题是Web页面中显示在浏览器标题栏的字段。许多站点把自己的网页的主要信息会放在标题栏中。BODY标签BODY中放置了网页的主要内容,文本。在本系统中主要是通过HtmlParser的第三方开源的软件包实现网页的解析功能。Htmlparser是一个纯java语言的html解析的库,它不依赖于其它的java库文件,主要用来改造和提取html文件。它能够超高速的解析html。为了获得超链接,title等信息,本系统中的主要代码如下:package mon.htmlparser;import java.util.HashSet;import java.util.Set;import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.beans.StringBean;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.filters.OrFilter;import org.htmlparser.tags.LinkTag;import org.htmlparser.tags.TitleTag;import org.htmlparser.util.NodeList;import com.briup.bean.URLInfo;import com.briup.log.ErrorLog;import com.briup.log.Log;public class HTMLParser private Set urls = new HashSet();/* * 网页的url */private String bUrl=;/* * 网页的title标题 */private String title=;/* * 解析给定的bootUrl网页 */public HTMLParser()public void HtmlParser(String bootUrl) bUrl = bootUrl;try /构建一个解析器Parser myparser = new Parser(bootUrl);myparser.setEncoding(myparser.getEncoding();NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);OrFilter lastFilter = new OrFilter();lastFilter.setPredicates(new NodeFilterlinkFilter,titleFilter);NodeList nodelist = myparser.parse(lastFilter);Node nodes = nodelist.toNodeArray();/将当前解析的url存入到日志文件中new Log(parse +bootUrl+success).start();for(int i =0 ; inodes.length;i+)Node anode = (Node)nodesi;if(anode instanceof LinkTag)/获取链接LinkTag linktag = (LinkTag)anode;String url = linktag.getLink().trim();if(url.toLowerCase().startsWith(http)urls.add(url);else if(anode instanceof TitleTag)/获取网页的titleTitleTag titletag = (TitleTag)anode;title = titletag.getTitle().trim(); catch (Exception e) new ErrorLog(e.getMessage().start();System.out.println(无效的url);public static URLInfo getUrl(String bootUrl)HTMLParser test = new HTMLParser();test.HtmlParser(bootUrl);URLInfo url = new URLInfo();url.setUrl(test.bUrl);url.setHitnum(0);url.setTitle(test.title);url.setWebText(test.getWebText(bootUrl);url.setLinks(test.urls);return url;public String getWebText(String bootUrl)StringBean sb = new StringBean();sb.setLinks(false);sb.setReplaceNonBreakingSpaces(true);sb.setCollapse(true);sb.setURL(bootUrl);String content = sb.getStrings();return content;URL转换程序如下:package mon.htmlparser;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import com.briup.bean.URLInfo;public class ParseUrls /存放解析过的urlinfoprivate static Set urlinfo = new HashSet();public static void parse(URLInfo url)url.setId(1);urlinfo.add(url);int id = 2;Set urls = url.getLinks();Iterator itea = urls.iterator();while(itea.hasNext()String parseurl = (String)itea.next();URLInfo parsedurl = HTMLParser.getUrl(parseurl);parsedurl.setId(id+);urlinfo.add(parsedurl);public static Set getUrlinfos(URLInfo url)parse(url);return urlinfo;public static void main(String args)Iterator itea = getUrlinfos(HTMLParser.getUrl(/).iterator();while(itea.hasNext()URLInfo url = itea.next();System.out.println(url.getTitle()+*+url.getUrl();6.1.4 Spider程序结构网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。程序首先解析网页的HTML代码,查找该页面内的超连接然后通过递归和非递归两种结构来实现Spider程序。网络机器人功能图解,如图6-1所示。图6-1网络机器人功能递归结构递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费内存且不能使用多线程技术,故不适合大型项目。非递归结构这种方法使用队列的数据结构,当Spider程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当Spider程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。6.1.5 程序性能提高论述Internet中拥有海量的Web页面,如何开发出高效的Spider程序是非常重要的。下面就来介绍下几种提高性能的技术:Java的多线程技术:线程是通过程序的一条执行路线。多线程是一个程序同时运行多个任务的能力。它是在一个程序的内部进行分工合作。优化程序的通常方法是确定瓶颈并改进他。瓶颈是一个程序中最慢的部分,他限制了其他任务的运行。举个例子说明:一个Spider程序需要下载十个页面,要完成这一任务,程序必须向服务器发出请求然后接受这些网页。当程序等待响应的时候其他任务不能执行,这就影响了程序的效率。如果用多线程技术可以让这些网页的等待时间合在一起,不用互相影响,这就可以极大的改进程序性能。数据库技术:当Spider程序访问一个大型Web站点时,必须使用一种有效的方法来存储站点队列。这些队列管理Spider程序必须维护大型网页的列表。如果把他们放在内存中将会是性能下降,所以我们可以把他们放在数据库中减少系统资源的消耗。6.1.6 Spider程序综述在本章中,首先介绍了网络机器人的基本概念,然后具体分析了Spider程序的结构和功能。在最后还结合具体代码进行了详细说明。6.2 索引设计6.2.1 Lucene全文检索Lucene是Apache软件基金会Jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的构架,提供了完整的查询引擎和搜索引擎及部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。作为一个开放源代码项目,Lucene自问世以后,引发了开放源代码社群的巨大反响,程序员们不仅适用它构建具体的全文检索应用,而且将之集成到各种系统软件中,以及构建web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。已经有很多java项目都使用了Lucene作为其后台的全文检索引擎,例如jive,Eyebrows等。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。Lucene作为一个全文检索引擎,其具有如下突出的优点:(1)所有的问题都通过一个额外抽象层来方便以后的扩展和重用:你可以通过重新实现来达到自己的目的,而对其他模块而不需要;(2)简单的应用入口Searcher、Indexer,并调用底层一系列组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论