收藏 分享(赏)

搜索引擎与网络爬虫的浅析及实现.doc

上传人:wo7103235 文档编号:6253191 上传时间:2019-04-03 格式:DOC 页数:34 大小:500KB
下载 相关 举报
搜索引擎与网络爬虫的浅析及实现.doc_第1页
第1页 / 共34页
搜索引擎与网络爬虫的浅析及实现.doc_第2页
第2页 / 共34页
搜索引擎与网络爬虫的浅析及实现.doc_第3页
第3页 / 共34页
搜索引擎与网络爬虫的浅析及实现.doc_第4页
第4页 / 共34页
搜索引擎与网络爬虫的浅析及实现.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、搜索引擎与网络爬虫的浅析及实现1本科毕业论文题 目:搜索引擎与网络爬虫的浅析及实现姓 名: 学 院: 软件学院系: 软件工程专 业: 软件工程年 级: 学 号: 指导教师: 职称: 年 月搜索引擎与网络爬虫的浅析及实现2摘要随着互联网的发展, 网上的资源越来越丰富, 如何有效利用网上的资源, 是当今信息时代的主题。搜索引擎的出现,就为如何在互联网的海洋中有效地搜索用价值的信息提供了一个很好的解决方法。本文将对互联网搜索引擎的系统结构进行详细的剖析,然后分别对搜索引擎的主要组成部分网络爬虫,索引数据库, 服务器端进行实例化分析。为了达到让读者了解搜索引擎及网络爬虫的原理,笔者基于 java 平台

2、上实现了一个简单的新闻搜索引擎,以其后几章里将以该引擎为例,阐明一般搜索引擎的基本原理和实现方法。新闻搜索引擎的原理简单说来是从指定的互联网页面上抓取超链接, 然后对其进行解析、分类,并把结果(新闻条目)建立索引后加入数据库。用户从浏览器向 Web 服务器发出搜索请求,服务器端接到请求后,从索引数据库中搜索出匹配的新闻,通过 web 响应返回给客户端,并显示在用户浏览器上。关键字 互联网 信息 搜索 网络爬虫 索引 服务器搜索引擎与网络爬虫的浅析及实现3AbstractWith the development of the Internet, the resource on the Inter

3、net becomes huge and vast. How to utilize the resource efficiently, is the exciting topic nowdays. The come out of the Search Engine, provides some helpful solutions to this problem. This thesis begins with analyzing the structure of the Search Engine, and then states the details of the components w

4、hich consist of the Search Engine. That is, Spider, Index Database and Web Server.In order to make the audiences understand clearly, I implement a News Search Engine on the Java Platform. I will analyze the principle of Search Engine with this instance.The principle of the News Search engine is simp

5、ly to acquire the hyperlinks on the web page by the Spider. Then the collection of hyperlinks will be parsed, classified, indexed and stored in the Index Database. While receiving the request from the Client (usually the Internet Explorer), the Search Engine searches for the information in the Datab

6、ase immediately, then responses the result to the Client by Http message, showed on the Internet Explorer.Key words Internet, Search Engine, Spider, Index, Web Server.搜索引擎与网络爬虫的浅析及实现4目录摘要 2第一章 搜索引擎简介 71.1 搜索引擎的发展历史 .71.2 搜索引擎的实现原理 .71.2.1 搜索引擎的基本结构 .71.2.2 网络爬虫 .91.2.3 索引数据库 .91.2.4Web 服务器 .91.3 小结

7、.9第二章 网络爬虫原理及设计 102.1 网络爬虫的概述及其工作原理 .102.2 网络爬虫的搜索策略 .122.3 构造网络爬虫 .132.3.1 解析 HTML132.3.2 HTMLPage.open()方法 142.3.3 Vector 类 .152.3.4 Iterator 接口 .152.3.5 com.heaton.bot.Link 类 .162.3.6 利用 Searcher 类扫描网页 .162.4 小结 .17第三章 lucene下的索引和搜索 .173.1 什么是 Lucene173.2 Lucene 的原理分析 .183.3.Lucene 的中文切分词机制 .183.

8、4 索引数据库的实现 193.4.1 生成索引数据库文件的 IndexWriter 类 .193.4.2 AddNews(String url, String title)方法 193.5 小结 20第四章 实验设计与结果演示 224.1 新闻搜索引擎程序结构 224.2 新闻搜索引擎服务器端 234.3 客户端 .274.4 结果演示 .27第五章 搜索引擎策略 295.1 概述 .295.2 第四代搜索引擎搜索策略 .305.2.1 Guide words305.2.2 网页评级 .305.3 搜索引擎未来展望 31鸣谢 32参考文献 33搜索引擎与网络爬虫的浅析及实现5ContentsA

9、bstract2Chapter1 Introduce to Search Engine71.1 History of Search Engine71.2 How to implement a Search Engine71.2.1 Structure of Search Engine71.2.2 Spider91.2.3 Index Database91.2.4 Web Server91.3 Summary9Chapter2 Principle and Design of Spider102.1 Introduce to Spider.102.2 Search Strategy122.3 Co

10、nstruct a Spider.132.3.1 Parse HTML.132.3.2 HTMLPage.open()142.3.3 Vector152.3.4 Iterator152.3.5 com.heaton.bot.Link162.3.6 Scan the HTML by Searcher Class162.4 Summary17Chapter3 Index and Search base on Lucene173.1 What is Lucene.173.2 Principle of Lucene183.3. Chinese Characters analysis in Lucene

11、.183.4 Implement Index Database193.4.1 IndexWriter193.4.2 AddNews(String url, String title)193.5 Summary20Chapter4 News Search Engine Designing and Performance224.1 Structure of the News Search Engine224.2 Server234.3 Client274.4 Performance.27Chapter5 New Search Strategy295.1 Introduce to Search St

12、rategy295.2 The Fouth Generation Search Strategy.305.2.1 Guide words305.2.2 Evaluate the Website.305.3 Future of Search Engine31Acknowledgements32搜索引擎与网络爬虫的浅析及实现6Reference33搜索引擎与网络爬虫的浅析及实现7第一章 搜索引擎简介1.1 搜索引擎的发展历史在互联网发展初期,网站相对较少,信息查找比较容易。然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运而生了

13、。随着 WWW 的发展,搜索引擎发出闪耀的光芒。搜索引擎自出现以来,经历了三代的发展 1:表 11 搜索引擎发展的三个阶段出现时间建立索引数目速度 使用技术第一代 1994 年少于1,000,000个慢Information Retrieval、网络、数据库等第二代 1996 年约50,000,000 个较快Information Retrieval、网络、数据库、分布式等第三代 2000 年约200,000,000个极快Information Retrieval、网络、数据库、分布式等1.2 搜索引擎的实现原理1.21 搜索引擎的基本结构搜索引擎是通过对信息建立索引数据库,然后根据用户的查询

14、请求,按照一定算法在数据库中查询找到匹配的信息并返回给用户。为了保证用户查找信搜索引擎与网络爬虫的浅析及实现8息的精度和新鲜度,一个强大的搜索引擎需要建立一个庞大的索引数据库,从而保证信息的精度和覆盖的广度,并要及时更新以保证信息的及时性。一般搜索引擎的宏观结构如下图 2:图 11 搜索引擎的宏观结构微观结构如下图 2:图 12 搜索引擎的微观结构Web PagesSpiderCreate IndexSearch from DBWeb ServerIndex DatabaseIEIESpider搜索引擎与网络爬虫的浅析及实现91.2.2 网络爬虫网络爬虫是一个 WEB 页面扫描程序。它通过扫描

15、 WEB 页面, 抓取其内的超链接, 并将其加入扫描等待队列。网络爬虫扫描 web 页面的策略一般分为:广度优先、深度优先和 IP 地址三种。设计时可根据需要制定扫描策略。1.2.3 索引数据库网络爬虫扫描后得到的 WEB 页面放在临时数据库中,为了提高检索效率,需要对数据库建立索引。用户输入搜索条件后搜索程序在索引数据库中检索然后返回符合查询要求的信息的索引,按索引找到超链接按一定次序返回给用户。1.2.4Web 服务器Web 服务器是用户与索引数据库之间的桥梁。用户在浏览器中输入查询关键字,Web 服务器根据查询关键字在索引数据库中进行查询、排列然后返回给客户端。1.3 小结以上对基于因特

16、网的搜索引擎结构进行了分析,下面在这些研究的基础上,以笔者设计的一个简单搜索引擎News Search Engine 为例, 对上述搜索引擎的三个组成部分进详细分析。在这个新闻搜索引擎中,笔者运用了 Java 技术和其它一些 Open Source 工具(bot 开发包 3 和 Lucene 包 4) 。搜索引擎与网络爬虫的浅析及实现10第二章 网络爬虫原理及设计2.1 网络爬虫的概述及其工作原理网络爬虫,是一种专业的抓取 WEB 页面的程序,也叫网络机器人,是搜索引擎的重要组成部分。网络爬虫从一个或多个 Web 页面上开始执行,获得该网上上的超链接,将这些超链接放入队列,然后通过这些超链接再

17、访问下一级页面,再抓取其页面上的超链接放入队列,如此不断地循环,直到没有满足条件的新超链接为止。理论上它可以扫描 Internet 上的所有页面 4。被网络爬虫抓取的网页超链接会被储存在扫描等待队列中,然后用一定的算法将它们排序、分析、过滤,以便之后的下一级扫描。下面是网络爬虫的工作流程图搜索引擎与网络爬虫的浅析及实现11图 21 网络爬虫的工作流程图把 URL 加入等待队列Spider 程序工作完成等待队列中是否有 URL?否下载从等待队列中得到的网页,并将他送入运行队列中。是这个网页包含其他超级连接吗?将这一网页送入完成队列并继续查看网页上的下一个超连接是否为指向Web 的连接?报告其他类

18、型连接连接是否与网页所在主机不同且只处理本地连接?报告外部连接报告网页连接将连接加入等候队列否是否是否是搜索引擎与网络爬虫的浅析及实现122.2 网络爬虫的搜索策略网络爬虫沿超链接访问并抓取网页的时候,一般有 IP 地址搜索、深度优先搜索和广度优先搜索三种策略 5。IP 地址搜索先赋予爬虫一个起始的 IP 地址, 然后根据 IP 地址递增的方式搜索本 IP 地址段后的每一个 WWW 地址中的文档,它完全不考虑各文档中指向其它 Web 站点的超级链接地址。优点是搜索全面,能够发现那些没被其它文档引用的新文档的信息源;缺点是不适合大规模搜索。深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的

19、是要达到被搜索结构的叶结点(即那些不包含任何超链的 HTML 文件) 。在一个 HTML 文件中,当一个超链被选择后,被链接的 HTML 文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着 HTML文件上的超链走到不能再深入为止,然后返回到某一个 HTML 文件,再继续选择该 HTML 文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。优点是能遍历一个 Web 站点或深层嵌套的文档集合;缺点是因为 Web 结构相当深,,有可能造成一旦进去,再也出不来的情况发生。广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜

20、索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始 URL 在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低 6。广度优先搜索策略 在广度优先搜索中,先搜索完一个 Web 页面中所有的超级链接,然后再继续搜索下一层, 直到底层为止。例如,一个 HTML 文件中有三个超链,选择其中之一并处理相应的 HTM

21、L 文件,然后不再选择第二个 HTML文件中的任何超链, 而是返回并选择第二个超链,处理相应的 HTML 文件,再返回,选择第三个超链并处理相应的 HTML 文件。一旦一层上的所有超链都己被选择过,就可以开始在刚才处理过的 HIML 文件中搜索其余的超链。这就保证了搜索引擎与网络爬虫的浅析及实现13对浅层的首先处理。当遇到一个无穷尽的深层分支时,不会导致陷进 WWW 中的深层文档中出现出不来的情况发生。广度优先搜索策略还有一个优点,即它能在两个 HTML 文件之间找到最短路径。广度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深

22、层嵌套的 HTML 文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的 HTML 文件。综合考虑以上几种策略和国内信息导航系统搜索信息的特点,国内一般采用以广度优先搜索策略为主、线性搜索策略为辅的搜索策略。2.3 构造网络爬虫2.31 解析 HTML前面介绍了网络爬虫的基本原理和爬虫的搜索策略后,现在让我们来用Java 语言来构造一个网络爬虫。首先,网络爬虫抓取的是网页上的超链接。一个 HTML 页面上包含有各种元素,那我们怎么从这些各种各样的元素中区分出哪些是文本,哪些是超链接,哪里是表单呢?这就是网络爬虫首先要实现的功能解析 HTML。我们可以通过两种方法来解析 HTML,第一

23、,JAVA 强大的功能提供我们解析HTML 的类库,我们可以用 Swing 类来进行解析。另外,JAVA 良好的封装性和继承性,让我们可以引用前人的成果,直接导入一个叫 bot 的开发包,利用其中的类来解析 HTML6。Bot 包是美国的一个叫 Jeff Heaton 的 IEEE 成员编写的一个基于 Socket利用 Http 协议访问网络的开发工具包,包中提供了大量关于 Spiders、Bots和 Aggregators 程序设计所需的类库。该包可以从http:/ 上获取,目前作者提供的最新版本为 1.4。 6Bot 包中的有个 HTMLPage 类 7。专门用于解析 HTML 页面。下面

24、给出该类几种重要的方法。搜索引擎与网络爬虫的浅析及实现14表 21HTMLPage 类中的方法方法名称 功能描述addImage() 添加图像链接getForms() 获得所请求网页中的所有表单getHTTP() 获得所使用的 HTTP 对象getImages() 获得所请求网页中的所有图像getLinks() 获得所有的超链接getURL() 获得本次请求的 URLHTMLPage() 以一个给定的 HTTP 对象构造 HTMLPage 对象Open() 检索并解析指定的 URL 资源Post() 根据表单的 Action 属性发送表单的内容processPage() 对该网页进行处理,如果

25、我们需要进一步处理时,需要重写该方法因此,我们可以用 HTMLPage 类的 getLink 方法获取超链接。我们创建一个名为“HTMLParse”的类,先引入必要的类。import java.util.Iterator;import java.util.Vector;import com.heaton.bot.HTMLPage;import com.heaton.bot.HTTP;import com.heaton.bot.Link;HTMLParse 类的构造函数为 public HTMLParse(HTTP http) _http = http;参数是上一步骤(下一节详述)扫描所得的网页

26、,以 HTTP 的形式传进来并实例化 HTMLParse 类。然后用 open()方法打开并读取该页面,此后,getLink方法获得的 URL 放进 Vector 类型的队列里。2.3.2 HTMLPage.open()方法 Open 方法是用来打开一个页面,并读取其中的内容。Public void open(URL url1, Callback, callback1),其中参数 URL,是要被读取的页面的URL,参数 Callback 如果设为 NULL 的时候,HTMLPage 类里的其他方法(如搜索引擎与网络爬虫的浅析及实现15getLink(),getImage()等)可以被调用来取得

27、其中的链接和图片等。在这里我们用 getURL()获得要抓取页面的 URL,作为参数传给 open 方法,_page.open(_http.getURL(), null);callback 参数设为 null,然后调用下面的方法逐步解析页面。2.3.3 Vector 类Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作 7。在实际操作中,我们用 Vector 类来创建一个队列,用来管理 getLink()方法抓取的超链接。Vector _links =

28、_page.getLinks();2.3.4 Iterator 接口public interface Iterator是一个对集合进行迭代的迭代器,由于我们上面用了 Vector 类创建了一个对象数组,于是我们可以用 iterator 来对其中的内容进行一条一条地取读。Iterator 有三个主要方法:表 22 Iterator 主要方法boolean hasNext() 如果仍有元素可以迭代,则返回 true。Enext() 返回迭代的下一个元素。void remove() 从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作) 。于是,我们先实例化一个 Iterater 接口:Ite

29、rator _it = _links.iterator();再用 hasNext()判断 Vecotor 是否还有下一个元素,有则执行下一步操作(在这里只列出主要的代码) ,搜索引擎与网络爬虫的浅析及实现16while (_it.hasNext() Link _link = (Link) _it.next();用 iterator.next()方法读出下一个元素,在这里是一个在等待队列中的超链接。用 Link 类型强制转型,然后存储存在 Link 类型的变量中。2.3.5 com.heaton.bot.Link 类这是一个十分简单的用来放网页超链接的类,它里面有 getHREF()和getPr

30、ompt()两个方法用以返回该超链接的属性。在新闻搜索引擎的实例中,我们用 String _herf = input(_link.getHREF().trim();来获得新闻的超链接并存储在 String 类型的 _herf 变量中。用 String _title = input(_link.getPrompt().trim();获取新闻的标题,并存储在 String 类型的 _title 变量中。2.36 利用 Searcher 类扫描网页扫描网页是一项简单的工作,利用在 BOT 包的 Spider 类,可实现自动扫描网页的功能。新建 Searcher 类之前,先 import com.he

31、aton.bot.Spider。然后创建 Searcher 类的构造函数,Searcher _searcher = new Searcher();在 Searcher 里实例化一个 Spider, Spider _spider= new Spider(_searcher, http:/localhost:8080/myjsp/News.jsp new HTTPSocket(), 100);参数中的 URL 是要扫描的页面,100 扫描获得超链接的最大数目 8。此外,Searcher 类还将扫描得到的页面以参数的形式传给 HTML 解析器,即 2.3.1 里的 HTMLParse 类。 publ

32、ic void processPage(HTTP http) new HTMLParse(http).start();搜索引擎与网络爬虫的浅析及实现172.4 小结在本章中,首先介绍了网络爬虫的基本概念,然后具体分析了网络爬虫程序的结构和功能。本新闻搜索引擎所用的网络爬虫,结合扫描网页和解释 HTML 两方面的功能,这两方面的功能,主要由第三方开发包 Bot(由 Jeff Heaton 提供的开发包)提供类库。事实上,本人在设计 HTMLParse 类时,在解析 HTML 的同时,将得到的结果(超链接,文本等)添加到索引数据库中。关于索引数据库的使用,将在下一章介结。搜索引擎与网络爬虫的浅析及

33、实现18第三章 lucene下的索引和搜索3.1 什么是 LuceneLucene 是 Apache 的开源项目其中一个分支。它是一个用 Java 写的全文索引引擎工具包,导入程序后可实现全文索引/检索功能 8。Lucene 的贡献者 Doug Cutting 是一位资深全文索引/检索专家,曾经是 V-Twin 搜索引擎(Apple 的 Copland 操作系统的成就之一)的主要开发者,后在Excite 担任高级系统架构设计师,目前从事于一些 INTERNET 底层架构的研究。他贡献出的 Lucene 的目标是为各种中小型应用程序加入全文检索功能。Lucene 的发展历程 9:早先发布在作者自

34、己的 ,后来发布在 SourceForge,2001 年年底成为 APACHE 基金会 jakarta 的一个子项目:http:/jakarta.apache.org/lucene/3.2 Lucene 的原理分析本新闻搜索系统利用 Lucene 生成一个索引文件,通过在索引文件里找查得到匹配的记录。总体上看:可以先把 Lucene 当成一个支持全文索引的数据库系统。数据库索引能够大大提高查询的速度,就像通常书籍后面常常附关键词索引表(比如:北京:12, 34 页,上海:3,77 页 ) ,它能够帮助读者比较快地找到相关内容的页码的原理一样。通过在生成的索引文件里找查数据,比在原始网页上找查数

35、据要快多了。而索引之所以效率高,另外一个原因是它是排好序的。而通过 Lucence 的API 接口,就可以对数据进行排序和建立索引。搜索引擎与网络爬虫的浅析及实现19Lucene 的 API 接口设计的比较通用,输入输出结构都很像数据库的表=记录=字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene 的存储结构和接口中。3.3.Lucene 的中文切分词机制对于中文来说,全文索引首先还要解决一个语言分析的问题,对于英文来说,语句中单词之间是天然通过空格分开的,但亚洲语言的中日韩文语句中的字是一个字挨一个,所有,首先要把语句中按“词”进行索引的话,这个词如何切分出来就是一个

36、很大的问题。在本新闻搜索系统里运用了 lucence 开发包下.ChineseAnalyzer 类,该类专门用于中文切分词机制 9。利用 cn.ChineseAnalyzer 的解决办法是:将单词按照 2 元语法(bigram)方式切分出来,比如:“体育新闻“ = “体育 育新 新闻“。这样,在查询的时候,无论是查询“体育“ 还是查询“新闻“,都同样能够正确地映射到相应的索引中。自动切分的最大优点是没有词表维护成本,实现简单,缺点是索引效率低。3.4 索引数据库的实现3.4.1 生成索引数据库文件的 IndexWriter 类IndexWriter 类是用来建立并维护一个索引的类。public

37、 IndexWriter(Directory d, Analyzer a, Boolean create)第一个参数 d 指定了该索引文件将在 d 中生成,本实例中以“c:Newsindex”为路径创建索引文件;第二个参数 a 指定了以什么切词法分析,而新闻搜索引擎中以 ChineseAnalyzer 中文切词分析法来分析;第三个参数指定是否新建一个目录,如果 true 则新创建一个文件,将原有的索引覆盖。当索引文件 Index 刚被创建时,该文件还空的,这时我们需要向它里面一搜索引擎与网络爬虫的浅析及实现20条条地将内容加进去。3.4.2 AddNews(String url, String

38、 title)方法向索引文件添加内容时,我们需要用到 AddNews 方法,这是一个笔者自己定义的方法。两个参数分别是新闻的超链接和新闻的标题,即在 HTMLParse 类里解析得到的结果。在这里,我们以记录为单位,向索引文件中写入内容。要建立一条条的记录,我们要用到 org.apache.lucene.document 类,一个实例化的 Document 类就是一条记录,它由一系列字段组成,每个字段必须有字段名和字段值。 Document _doc = new Document();_doc.add(Field.Text(“title“, title);_doc.add(Field.UnIn

39、dexed(“url“, url);然后再调用 IndexWriter 的方法_writer.addDocument(_doc);将一条记录写进 Index 文件中。用 Document 为单位一条条记录地写进索引文件的好处是当搜索命中的时候,它会以整条记录为单位返回。3.5 小结整个建立索引的过程如下图所示:搜索引擎与网络爬虫的浅析及实现21Index空文件Document 类 (空记录)新闻超链接 新闻标题超链接 标题Index 文件其它新闻记录(1)新建一个空的索引文件(2)新建一个空的新闻记录(3)将新闻的属性添加到新闻记录的字段中(4)将新闻记录添加进索引文件中图 31 建立索引过程

40、搜索引擎与网络爬虫的浅析及实现22当完成了添加所有新闻记录的操作后,索引文件会将所有记录按一定算法排序,于是该文件里面存有已排序的记录,当服务器端接收到用户的查询条件时,根据关键字来到文件里搜索,然后将匹配的结果以记录的形式返回给用户。第四章 实验设计与结果演示4.1 新闻搜索引擎程序结构本新闻搜索引擎用了 Tomcat 作为服务器软件。搜索引擎的服务器端主要利用 Java Servlet 技术实现,服务器端从客户端接受到用户通过 GET 方法提交的查询关键字,服务器端的 Servlet 容器分析接收到的参数,然后在上一节所述的索引文件(“c:Newsindex” )中进行搜索。得到匹配结果后

41、,以 HTTP 消息的方式返回至客户端。新闻搜索引擎结构设计图例: 图 41 新闻搜索引擎结构互联网索引数据库NewsServer网络爬虫新闻搜索引擎搜索引擎与网络爬虫的浅析及实现23新闻搜索引擎类图:图 42 新闻搜索引擎类图4.2 新闻搜索引擎服务器端服务器端用以接收用户的请求,并作出响应,即根据用户的查询条件,在索引文件中搜索,并将匹配的结果返回给用户。在这里,用了 doGet(HttpServletRequest request, HttpServletResponse response)接受查询请求并响应,最后以 HTTP 消息的形式返回结果给用户。Searcher Index HT

42、MLParseNewsResultNewsServer搜索引擎与网络爬虫的浅析及实现24/厦门大学软件学院 04 级 学号/News Searching Engine 1.0 2008-5-23package newsserver;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import ja

43、vax.servlet.http.HttpServletResponse;import org.apache.lucene.analysis.Analyzer;import .ChineseAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.luc

44、ene.search.Query;public class Resultsextends HttpServlet private static final String CONTENT_TYPE = “text/html; charset=GBK“;/Initialize global variablespublic void init() throws ServletException /Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response)

45、 throwsServletException, IOException String QC = request.getParameter(“QueryContent“);if (QC = null) QC = “;搜索引擎与网络爬虫的浅析及实现25else QC = input(QC);response.setContentType(CONTENT_TYPE);PrintWriter out = response.getWriter();try Search(QC, out);catch (Exception ex) System.out.println(ex.getMessage();pu

46、blic void Search(String qc, PrintWriter out) throws Exception / 从索引目录创建索引IndexSearcher _searcher = new IndexSearcher(“c:newsindex“);/ 创建标准分析器Analyzer analyzer = new ChineseAnalyzer();/ 查询条件String line = qc;/ Query 是一个抽象类Query query = QueryParser.parse(line, “title“, analyzer);out.println(“);out.prin

47、tln(“搜索结果“);out.println(“);out.println(“ +“ +“新闻搜索引擎:“ +“ +“ +“);out.println(“搜索关键字:“ + query.toString(“title“) +“);Hits hits = _searcher.search(query);out.println(“ 总共找到 “ + hits.length() + “条新闻“);final int HITS_PER_PAGE = 10;for (int start = 0; start “ +replace(doc.get(“title“), qc) +“);else Syste

48、m.out.println(“没有找到!“);out.println(“);_searcher.close();public String input(String str) String temp = null;if (str != null) try temp = new String(str.getBytes(“ISO8859_1“);catch (Exception e) return temp;public String replace(String title, String keyword) return title.replaceAll(keyword, “ + keyword

49、 + “);/Clean up resourcespublic void destroy() 图 43 Result 类代码4.3 客户端用户界面采用简洁而友好的排版,像 GOOGLE 和百度等专业搜索引擎一样。搜索引擎与网络爬虫的浅析及实现27客户端的设计很简单,可用纯 HTML 或 JSP 完成,而本搜索引擎采用了后者,是因为后者比 HTML 与 TOMCAT 服务器有无间的配合。用户可在 text 表单里输入查询关键字,然后按下按钮,将表单的内容通过get 方式传给 servlet.查询界面截图如下图 44 查询界面示图4.4 结果演示用户查询页面:搜索引擎与网络爬虫的浅析及实现28图 45 查询页面示图之一用户输入查询条件,如“体育” “娱乐” “科技”等:图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报