1、类别中小学信息技术编号校园网搜索引擎的分析与设计内容摘要:随着Internet的迅速发展,校园网也不断发展,校园网中的信息量不断增大,我们在查找信息时也因其信息资源量大而不能很快找到所需的信息,所以一种基于校园网的搜索引擎也就应运而生了。而网络蜘蛛技术是搜索引擎的关键。本文围绕这一技术而展开。首先从搜索引擎的种类和原理整体分析了搜索引擎,然后研究网络蜘蛛这一技术,从网络蜘蛛技术的原理、一般系统结构、关键技术、技术实现等几个方面来分别分析、为设计校园搜索引擎作最基本的工作。选择.NET为设计平台,以C#语言编写程序。关键词:搜索引擎;蜘蛛;超链接;爬取;URL1.引言随着Internet的快速发
2、展,网络正在深刻地影响着我们的生活。而在网上发展最为迅速的WWW (World Wide Web)技术,以其直观、简单、高效的使用方式和丰富的表达能力,已逐渐成为Internet上最重要的信息发布和交互方式。Internet上的数十亿的网页数量,这给人们带来了前所未有的丰富的信息资源。然而,Web信息的急速增长,在给人们提供丰富信息的同时,也存在信息量过大而导致人们不能很快找到自己所需信息的问题。因此,随之而来的就出现了搜索引擎,但搜索引擎在如此快速的Internet发展之下也面临很多挑战2:(1)Web上的信息种类繁多、丰富多彩使得搜索引擎能够检索的范围越来越小。(2)Web是一个动态增长的
3、信息源,随时会发生各种变化。(3)搜索引擎面对的用户是形形色色的,这些用户的信息需求、知识背景、兴趣各不相同。对于目前搜索引擎存在的各种不足及面临解决的诸多难题,如:如何跟上Internet的发展速度,如何才能提供更加方便易用的搜索服务,如何才能为用户提供更加精确的查询结果等等,都是未来很长一段时间内搜索引擎的发展方向。总的看来,其未来发展的趋势将主要体现在以下几个方面1,4,29:(1)专业化搜索:搜索引擎的专业化是为了专门收录某一行业、某一主题和某一地区的信息而建立,缩小了搜索范围,非常实用,如企业查询、行业信息查询等等。这种专业化的搜索引擎需要对专业知识专而精,并要求内容全面。(2)个性
4、化搜索:提高搜索精确度的另一个途径是提供个性化搜索,也就是将搜索建立在个性化的搜索环境之下,通过对用户的不断了解、分析,使得个性化搜索更符合每个用户的需求。2.搜索引擎的分类及工作原理2.1搜索引擎的分类当前搜索引擎的分类方法有很多,因此分类出来的搜索引擎也很多。通常根据搜索引擎信息收集方法和工作方式的不同,现有的搜索引擎有以下三类:1.机器人搜索引擎;2.目录式搜索引擎;3.元搜索引擎3,6,21。2.1.1机器人搜索引擎 机器人搜索引擎它是将Web视作一个大型的全文数据库,利用几个关键词来表示一个网页,通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件
5、匹配的相关记录,返回查询结果一般包括Web页面标题和URL等信息,然后按一定的排列顺序将结果返回给用户,是真正的搜索引擎。国外具有代表性的有Google、AllTheWeb等,国内著名的有百度(Baidu)。这类搜索引擎的优点是信息量大,无需人工干预,但由于关键词是直接从原文中抽取的,每个人对于一个主题的描述存在着很大的随意性,而且关键词之间又是互相独立的,所以返回查询结果往往缺乏准确性。机器人搜索引擎的自动信息搜集功能分两种:一种是拥有自己的搜索程序,俗称“蜘蛛”(Spider)程序或“机器人”(Robot)程序,定期对一定IP地址范围的互联网站进行检索,一旦发现新的网站,它会自动提取网站的
6、信息和网址加入自己的数据库,搜索结果直接从自身的数据库中调用;另一种是由网站拥有者主动向搜索引擎网站提交网址。2.1.2目录式搜索引擎目录式搜索引擎是以人工方式或半自动方式搜集信息,由编辑员查看信息之后,人工编辑摘录核心信息,并将信息置于事先确定的分类框架中。由于目录索引只是一个按目录分类的网站链接列表,因此目录式搜索引擎虽然有搜索功能,但严格意义上不能称为搜索引擎,仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词查询,仅靠分类目录也可找到需要的信息。它的优点在于:目录清晰、内容较准确、有效价值较高;缺点也比较明显:分类体系不规范、不统一,交叉类目容易遗漏;人工分类,效率比较低,
7、速度比较慢,更新不及时。目录搜索引擎中最具代表性的如Yahoo(雅虎)。2.1.3元搜索引擎元搜索引擎,即指在统一的用户查询界面与信息反馈的形式下,共享多个搜索引擎的资源库为用户提供信息服务的系统,又称作搜索引擎之上的搜索引擎。元搜索引擎自身没有建立存储网页信息的数据库7,而是将用户的查询请求同时传送至多个包含数据库的搜索引擎,并行地访问数个搜索引擎来查询这个关键词,然后对各搜索引擎返回的结果进行去重、排序等整理,最终响应给检索用户。严格意义上来讲,元搜索引擎只能算是一种用户代理,而不是真正的搜索引擎。目前,没有一个搜索引擎能涵盖整个Internet,各搜索引擎的收录范围又有所差异,因此这类元
8、搜索受到了一定程度的关注,特别适合于对查全率要求高的查询。但是,不同的搜索引擎之间,建立索引数据库和执行提交检索的具体方法或规则并不相同,因此,大大影响了元搜索的检索效果。2.2搜索引擎工作原理搜索引擎的工作原理基本都是一样的10,利用一个叫网络蜘蛛的程序在网络上爬行,自动地遍历Web来获得的网络信息并保存到本地服务器中。因此,我们通常所说的搜索引擎并不是真正的在搜索互联网,而是通过用户提供的关键词,搜索引擎再根据此关键词进行对其服务器的数据库进行搜索。为了保证用户查找信息的精度和及时,搜索引擎需要建立并维护一个庞大的索引数据库,从而能够迅速的从中找到相关的信息。搜索引擎的工作过程一般来说可以
9、看作三大步:从互联网上爬取网页预处理查询服务23,如图1。WWW信息采集器分析索引排序索引库进行检索分析查询结果排序用户查询返回信息处理建立索引图1 搜索引擎工作流程图(1)从互联网上爬取网页事先利用搜索引擎中的蜘蛛程序,自动地从一个种子URL集出发。它能自动扫描与URL相对应的网页,它利用HTML语言的标记结构搜索信息和获取指向其他超文本的URL链接,通过一定搜索策略选择下一个要访问的页面,继而转向另一个链接的页面继续进行信息搜集,如此通过找到新的URL不断爬行,不断搜集页面。从理论上讲,网络蜘蛛可以搜集Internet上所有信息。(2)预处理(建立索引数据库)由蜘蛛程序采集回来的信息,经分
10、析索引系统程序对其进行分析处理,提取相关网页信息(包括网页筛选、页面内容包含的所有关键词、关键词位置、生成时间、大小、与其它网页的链接关系等),根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面文字中及超链中每一个关键词的相关度(或重要性),然后利用这些相关信息建立网页索引数据库。(3)查询服务(在索引数据库中搜索排序)经过以上两个步骤后,当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到与该关键词所有相关的网页。因为所有相关网页针对该关键词的相关度早已按照预设的算法算好,所以只需按照现成的相关度数值排序,相关度越高,排名越靠前。最后,由页面生成系统将搜索结果的链接地址和页
11、面内容摘要等内容组织起来返回给用户。由以上简述可知,网络蜘蛛在整个搜索引擎中是核心组成部分之一。3.网络蜘蛛简介3.1网络蜘蛛在搜索引擎原理中提到过,其数据库是通过网络蜘蛛搜集的网页。那么在具体搜集过程中,如何爬取一篇篇网页,最常见的是通过爬取来找到网页15,23,24。就是将 Web上的网页集合看成一个有向图,搜集过程是从给定的起始URL集合S开始,沿着网页中的链接,按照一定的策略遍历,不停的从S中读取URL,下载相应的网页,并解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。整个过程可以形象地想像为一个蜘蛛在蜘蛛网上爬行。通过前面的描述,可知网络蜘蛛 (Sp
12、ider)它是一种功能很强的基于HTTP协议的网络应用程序。它会定期根据预先设定的地址去查看对应的网页,如网页发生变化则重新获取该网页,否则根据该网页中的链接继续去访问其他页面,如此循环,理论上可以扫描互联网上的所有页面。例如Google,就是利用网络蜘蛛程序来遍历Web站点,以创建并维护这些大型数据库。3.2网络蜘蛛的工作原理及系统结构网络蜘蛛是通过一个给定的初始URL集合25,27,把这个初始URL集合放到URL处理器中;网页读取器根据URL处理器提供的这个初始URL集合,解析URL中标明的Web服务器地址、建立连接、发送请求和接收数据,采集到相应的网页;经过去重检测后,通过URL提取器从
13、网页中提取出新的URL放入URL处理器;并将其存入数据库中;由标签信息获取器获取相应的标签,分两个方向分别将其存入URL处理器中和存入数据库中保存;如此反复采集、处理数据,直到网页读取器要求停止(URL处理器中URL集合为空)为止。一般来说网络蜘蛛采集是模拟人浏览网站的过程进行对网页采集的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都爬取完为止。按这个原理来,如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都下载下来。根据以上工作过程,可以得到网络蜘
14、蛛的基本结构22如图2所示。www网页读取器URL处理器初始URL集合标签信息获取器URL提取器数据库网页去重检测图2 网络蜘蛛的基本结构图3.2.1URL处理器URL处理器是根据先进先出的策略向网页读取器分配URL。URL采取一个队列11,13,16,以达到更快的处理速度。URL处理器主要有两个数据来源:1)初始的种子URL集,如图2所示;2)从URL提取过来的URL集,它们是从已经读取到的页面中抽取出来并经过处理的。页面的标题及摘要等信息,来自标签信息获取器,它们主要用来显示从URL提取器中传递过来的URL和重要性,为在队列中进行排序提供依据。3.2.2网页读取器通过各种Web协议来完成资
15、料的采集。一般来说协议包括http、ftp等。但从主流上看,仍以http为主。根据分配的URL通过各种Web协议来爬取页面并读取页面内容。3.2.3网页去重检测网络上的资源,网页中的内容经常被其他网站、网页引用,蜘蛛程序找到的网页有很多重复的,如不进行网页重复内容的检测过滤,将极大的浪费了网络带宽和系统的运行效率。因此,重复内容检测是网络蜘蛛中的重要组成部分。3.2.4URL提取器在采集到的要读取的页面,通过网页去重检测后,需要分析其中的链接,进行抽取超链,这些任务由URL提取器来完成。首先判别页面类型,对类型为“html和htm”等的页面进行链接分析。页面的类型可在HTTP应答头的分析中得到
16、,也可以通过分析URL中的文件扩展名来得到。超链接的标记总共包括、和等。总的来说,要提取页面的URL,主要是根据关键词href和src来提取即可5,18,26。3.2.5标签信息获取器标签信息获取,包括提取页面的标题、页面的摘要等。主要目的是在没有对页面内容进行语义信息理解的前提下,尽可能多的挖掘出HTML标签、结构等信息,对从页面中提取出来的URL质量的好坏给出一个度量,并将其与已访问过的URL表进行比较,将未在表中出现的URL传输到URL处理器,对待提取URL队列进行排序。3.2.6数据库数据库中存储着采集下来的网页的URL、网页标题、网页摘要等,这些数据用于建立索引数据库时非常重要。3.
17、3网络蜘蛛的搜索策略在网络蜘蛛进行爬取网页时,通用搜索引擎的网络蜘蛛将网络上的各个页面及各页面之间的链接看成一个有向图,每个页面作为图的节点,页面中的链接看成是图的有向边,这样就可以用一定的有向图遍历法对其进行遍历。因此在设计通用搜索引擎时,常用的网络蜘蛛搜索策略有两种:基于广度优先(Breadth First)和基于深度优先(Depth First)两种搜索策略19。与通用搜索引擎不同的是,主题搜索引擎的网络蜘蛛是只服务于特定人群的搜索引擎,其索引的内容也只限于特定主题或专门领域,因而在搜索过程中不须对整个Web进行遍历,只需选择与主题相关的网页进行访问并建立索引数据库即可。3.3.1广度优
18、先策略广度优先搜索策略是指在爬取过程中,先完成爬取起始网页中链接的所有网页,然后再选择其中的一个链接,继续爬取在此网页中链接的所有网页。直到完成所有层的爬取。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。因为这个方法可以让网络蜘蛛并行处理,提高其爬取速度。同时也保证了对浅层的首先处理。从而爬取相对来说更为重要的网页。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用广度优先搜索策略这样一层一层爬取则需要花费比较长的时间才能到达深层的HTML文件。3.3.2深度优先策略深度优先策略是指网络蜘蛛从起始页开始,顺着HTML文件上的超链接直到不能再深入为止,然后返回到上一个接点的HT
19、ML文件,再继续选择该HTML文件中的其他超链接。当不再有其他超链接可选择时,说明搜索已经结束。深度优先搜索适宜遍历一个指定的站点或者深层嵌套的HTML文件集,但对于大规模的搜索,由于Web结构相当深,有可能永远也出不来了。图3对这两种搜索策略作了更加直观的说明。GFAEHICDBGFAEHICDB广度优先爬取顺序: 深度优先爬取顺序: A-B.C.D.E.F-H.G-I A-F-G E-H-I 图3 两种算法的爬取顺序图在搜索策略的选择上,MarcNajork等人研究证明,网络蜘蛛采用广度优先搜索策略爬行的网页质量要比采用深度优先搜索策略的要好20,23,因此,大多数网络蜘蛛的设计采用广度优
20、先搜索策略或者结合多种搜索策略的策略。大型搜索引擎在设计网络蜘蛛时,像百度等其他一些通用搜索引擎,由于Internet上网页数量非常大,它的网络蜘蛛不可能爬取所有的网页,因此网络蜘蛛对一些不太重要的网站,限定了对网站访问的层数。在图3中,设A为起始网页,属于0层,那么与A直接相连的B、C、D、E、F就属于第1 层,依次类推G、H属于第2层,I属于第3层。如果网络蜘蛛设置的访问层数为1的话,网页G、H、I就不会被访问到。这也就是为什么有些网站上一部分网页能够在搜索引擎上搜索到,而网站中的另外一部分网页不能被搜索到。但是即使这样设计了,其数据量级别还是很大,而且范围也很广,所以大型搜索引擎的网络蜘
21、蛛设计都是采用分布式系统结构的17。据有关研究表明25,而采用分布式系统结构设计的网络蜘蛛其爬取得到的网页质量不如单一结构的网络蜘蛛所爬取得到的网页质量高。校园网的数据量相比于亿量级的数据量,并不大,所以在本次设计中,没有采用分布式系统结构设计其网络蜘蛛。3.3.3主题网络蜘蛛的搜索策略主题搜索引擎的网络蜘蛛,它只服务于一定的人群,因此采集信息时也只采集与主题相关的信息。主题搜索引擎其网络蜘蛛的搜索策略有很多种,以下简单介绍这些搜索策略。基于内容评价的搜索策略8,12,17,19,是由传统信息检索中的文本检索的思想转变过来的。即利用文本相似度的计算方法评价页面文本与主题集(如关键词、主题相关文
22、档)之间相似程度,再根据其相似程序确定访问页面的顺序。基于链接结构评价的搜索策略,利用页面的结构特征和链接的重要性,来决定搜索顺序。它有两种算法,分别是Page-Rank和HITS,前者原先用于对查询结果的排序,近几年被用于网络蜘蛛对链接重要性的评价;后者根据网页出入度确定网页的重要性。基于巩固学习的搜索策略,利用Web信息资源的相似性,先对网络蜘蛛进行一些训练,使其具备一些经验信息,再利用这些经验信息指导搜索。4.平台选择与关键技术4.1平台的选择.NET平台与JAVA平台都是当前两大流行的设计平台。这两大平台有各自的特点,都有非常强大的功能,都可以满足我们设计的需要。JAVA平台提供给我们
23、的是平台中立和可移植性,我们可以在WIN系统下或其他系统下开发项目,经过一次编译就可以在其他系统下运行;而.NET平台提供给我们的是可视化的开发界面,使初学者较容易上手,丰富的组件库可以使开发者轻松许多。考虑到初次设计这种要求较高的应用程序,我们这里选择.NET平台。4.2语言的选择前面讲到我们选择.NET作为我们的开发平台,在语言选择上,我们选择相对来说较为熟悉的C#语言作为本次设计的首选语言。4.3 I/O与数据流简介I/O一般指输入(input)/输出(output)系统,它本身提供应用程序与外部沟通的一种方式。数据流,是一个用于传输数据的对象,数据的传输也有两个方向:(1)如果数据从外
24、部源传输到程序中,这就是读取流。(2)如果数据从程序传输到外部源,这就是写入流。在C#语言中,它利用.NET的I/O系统,提供程序语言的I/O功能。.NET以面向对象设计方式,处理I/O相关问题,所有与I/O有关的功能,被封装于各种不同形式的类,而其中主要的I/O类,集中于命名空间System.IO。System.IO是非常大的命名空间,其中包含各种的类,提供不同格式数据流的处理功能。4.4访问Internet介绍C#可以通过.NET基类提供的方法和工具类,使用各种网络协议(如HTTP和TCP)访问网络和Internet。在制作具备网络功能的应用程序时,我们要用到相应的类及方法,而这些类、方法
25、都散布在System.Net.Sockets和Sytem.Net这两个命名空间。其中,前者提供实现Sockets应用程序的相关类,它通常与较低层的操作有关;后者提供开发因特网功能所需的应用程序接口,它通常与较高层的操作有关,例如使用HTTP等协议进行Web请求。4.4.1命名空间System.Net.SocketsSystem.Net. Sockets命名空间主要提供制作Sockets网络应用程序的相关类。其中几个比较重要的类有Socket类、TcpClient类、TcpListener类,另外一个类ScoketException,则是当Sockets网络错误或使用DNS类存取网络主机信息产生
26、错误时,系统所抛出的异常类。使用Socket实现具备网络连接服务的应用程序,通常必需提供接受客户端应用程序连接的服务端应用程序,整个应用程序的运作过程如下几步:(1)绑定至指定端点:对一个特定主机的指定通信端口,等待连接的服务器端应用程序,进行联系的操作;(2)完成服务器连接:联系完成后,创建与主机服务器的连接;(3)传送数据至Socket:在客户端应用程序,将指定的数据传送至Socket对象上;(4)从Socket上读取数据:上述步骤的反向操作,在Socket读取所需的操作。TcpClient类:它提供TCP网络服务的Client连接,提供TCP网络服务的客户端应用程序与服务器连接,然后使用
27、此连接发送和接收数据包。通过指定的IP地址以及通信端口编号进行连接的。其中IPEndPoint类代表网络终点,它是一种用以表示IP地址和通信端口编号的类。IPAddress类代表IP地址。TcpListener类:提供制作相关功能所需的方法,分别接受IP地址以及所要倾听的通信端口编号参数。NetworkStream类:主要是提供用于网络访问的基础数据流。它主要通过串接Socket对象,创建其对象实例,在使用前,需要创建Socket对象实例,并通过Socket.Connect方法建立与远程服务端的连接,而后才可以使用该方法得到网络传输流。4.4.2System.Net命名空间System.Net
28、命名空间提供了一般性的网络资源存取,如下载网页、文件等。有几个比较重要的类有WebRequest类、WebResponse类、HttpWebRequest类、HttpWebResponse类、WebClient类。WebRequest类和WebResponse类是.NET要求/响应结构模型的核心类;HttpWebRequest类和HttpWebResponse类让我们在使用HTTP协议完成网络的要求/响应等相关操作。4.5多线程技术线程可以视为一段独立执行的程序代码段,应用程序至少会于一个或一个以上的线程中执行,多线程可以让应用程序同时进行多项工作,提高执行性能。多线程通常被应用在以下几种情形
29、:一种是耗时的运算工作,如进行复杂的数学运算,这时可以让应用程序进行运算的同时,进行其他工作。另一种是等待响应信息,程序必须长时间等待响应时运用多线程技术。如通过网络读取文件或下载大量数据时,可以通过使用多线程技术来提高工作效率。4.5.1创建线程想要在应用程序里使用线程,最简单的方式便是创建Thread类的实例对象,在此之前,先引用System.Threading命名空间。以下为构造函数:Public Thread(ThreadStart startPoint);/startPonit参数是一个ThreadStart委派,用以封装线程对象所要执行的方法。此委派的定义如下:Public del
30、egate void ThreadStart();/ThreadStart委派不能有返回值,且不能接受任何参数。在创建新线程对象后,要调用Thread类的Start方法,如此线程才会开始执行委派Thread所封装的方法,Start方法定义如下:Public void Start();/启动线程;程序首先声明一个实例对象,调用Start()方法,再通过声明一个Thread类的实例对象Threading,再调用线程的Start()方法来启动线程。4.5.2线程的暂停与恢复Thread类提供一组方法,允许一个线程启动后,能够暂停执行,在适当的时候恢复执行。这里有几个方法可以达到此目的。其定义如下:P
31、ublic void Suspend();/暂停线程;Public void Resume();/恢复线程;Public void Join();/将一个新的线程加入到目前正在执行的线程。4.5.3终止线程从创建线程、执行到暂停等,最终要终止线程。这时可以调用方法Interrupt强制终止线程的执行。其定义如下:Public void Interrupt ();4.5.4线程管理线程允许应用程序同时执行多个工作,但是不当的使用线程也会带来不利影响。这时我们就可以用ThreadPool类来管理线程9。其中比较重要的方法为QueneUserWorkItem方法。5.程序实现5.1设计思路在理解本次
32、设计原理的基础上,本程序主要功能就是分析URL并下载网页,那么在进行设计完整程序之前,可以对本程序的设计进行简化。即把下载一个网站网页的设计简化为下载一个网页的设计。这个问题相对来说就比较简单,我们可以利用.NET中的WebRequest/WebResponse类打开目标URL地址并获取网页,再利用对数据流的操作将网页存入本地存储器的文件即可。在实际设计过程中,我们要设计的是能够下载一个网站的蜘蛛程序,那么我们在利用蜘蛛程序在对网站进行爬取之前,要给定这个程序的初始URL集合可以是这个网站的主页的URL,这样就可以从网站的主页进入,先下载主页,然后分析提取其中的超链接,并根据上面的方法依次下载
33、得到URL指向的网页,如此循环进行,就可以实现下载一个网站的网页,实现了具有一般功能蜘蛛的程序。以上是实现了一般功能的蜘蛛程序,为了设计出高性能的网络蜘蛛程序,我们可以设计多线程的网络蜘蛛,多线程并行工作,减少网络蜘蛛连接服务器下载网页时的等待时间,这样就可以有效的提高网络蜘蛛的工作效率。为了防止网络蜘蛛程序对已经访问过的URL再次访问,可以设计两个表,分别存放已访问过的URL和等待访问的URL,这样就可以有效地利用蜘蛛程序分析下载更多的新的网页。5.2设计分析有了上述的设计思路和简单的分析,对本次设计的蜘蛛程序分析如下:(1)首先是获取网页这一部分:可以分别通过运用System.Net命名空
34、间下的HttpWebRequest类、HttpWebResponse类、WebRequest等类,和System命名空间下的URI类、DNS等类来分析初始URL集合,并通过HTTP协议连接远程服务器,并以System.Threading命名空间下的Thread类创建工作线程实例对象,实现多线程获取网页,提高蜘蛛程序获取网页的效率,所得网页以普通文件的形式保存在本地磁盘上。(2)前面讲到过我们先给蜘蛛程序一个初始的URL集,蜘蛛程序才能根据这个初始URL爬取相应的网页,而这个初始URL是按序放在一个队列里的,所以我们以Queue类建立工作队列来保存正等待爬行的URL地址。(3)为了防止蜘蛛程序在
35、爬取过程中碰到循环链接不停地爬取,我们就以Hashtable类建立一个全局对象,保存已经爬行的URL地址,分析获得的网页,提取出其中的URL与Hashtable里的URL进行比较,若检测出URL还没有爬行,则将其加入到Queue队列里等待。(4) 整体工作流程为:由主线程启动所有并发线程进行爬取,每个线程爬取任务通过接口函数向主线程的Queue取得任务URL并移除Queue里的任务URL,保持先进先出,每次取队列中第一个元素。同时在工作过程中爬取到新的URL,就将其加入到队列Queue中,取得任务并完成后就向Hashtable写入URL。网络蜘蛛整体的流程图如图4所示:远程服务器页面缓存URL
36、分析连接提取分析下载网页未访问URL(队列)已访问URL(Hashtable)初始URL比较加入 加入本地磁盘保存图4 网络蜘蛛流程图5.3程序实现分析根据前面设计分析的介绍,可知,在设计蜘蛛程序时要解决的问题有以下几个:1.HTML分析;2.下载页面分析;3.多线程分析。5.3.1HTML分析蜘蛛程序进行搜索页面时,首先要获取网页头信息,而网页头信息是通过提取HTML标记来获得的。而C#语言本身不包含解析HTML的能力,但支持XML解析;不过,XML有着严格的语法,而HTML语法要宽松得多,HTML的语法是极不一致的,因此,我们需要设计一个HTML解析器。5.3.2下载页面分析在分析HTML
37、页面之后,接着是如何下载页面。前面在设计思路里,已经提到过可以通过使用System.Net命名空间下的HttpWebRequest/HttpWebResponse类实现下载页面。在下载时要先判断该文件是二进制文件还是文本文件,如果该文件不是文本文件,我们将它作为二进制文件读入。如果是文本文件,则需要先从Stream创建一个StreamReader方法,然后将文本文件的内容一行一行加入缓冲区装入整个文件之后,接着就要把它保存为文本文件。5.3.3多线程分析我们在设计蜘蛛程序时通常都是运用多线程技术来提高蜘蛛程序获取网页的效率的。因为对于蜘蛛程序来说,它每发出一个URL请求,总是要等待文件下载完毕
38、,然后再请求下一个URL。这样就会有许多时间花在等待上。如果蜘蛛程序能够同时请求多个URL,相间的等待要下载的文件,这样显然能够有效地减少总的下载时间。设计多线程的蜘蛛程序可以提高其爬行效率,但是多线程并行爬取的网页质量不如单线程的蜘蛛程序爬取得到的网页质量好26。所以在设计蜘蛛程序时这一点也要考虑的。5.4程序代码设计经过上述的从设计思路、设计分析到程序实现,这么一系列分析下来,整个蜘蛛程序的设计相对来说变得简单了。下面讲述一下本程序的设计中各个类的关系及类的详细信息。整个程序的主要类关系图如下图(图5、图6):图5 主要类关系图1图6 主要类关系图2在本程序中,对蜘蛛程序的控制操作(如:启
39、动、停止)主要由Spider类完成;而DocumentWorker类的主要作用是在单个线程工作时,它会对相应的页面进行HTML分析,并下载一个URL所链接的页面保存到本地磁盘,还有对线程的启动、停止的控制等操作。在线程工作时,我们还要对线程的工作状态进行判断,这里可以用Done类里的相应方法来判断线程是否完成工作。在图6中,显示的是ParseHTML类、Parse类、AttributeList类、Attribute类之间的继承关系,这几个类主要是用于分析网页标签和进行网页分析的类。在介绍了本程序主要类关系之后,下面介绍各个类设计的详细信息。Spider类:该类为程序的主类,继承自SpiderM
40、an类,Spider类本身并不做获取网页的具体工作,而是协调其它各类共同完成任务。此类主要是定义各种方法、属性,供其他类调用。各个方法的作用如图7Spider类的详细信息所示。图7 Spider类的详细信息图DocumentWorker类: 该类主要是完成必须由单个工作线程执行的操作,包括等待可用的URL,下载和处理页面等实际操作,该类中的各个方法属性相应的作用如图8的详细信息所示。图8 DocumentWorker类的详细信息图Done类:该类用于判断蜘蛛程序所处的状态,该类的各个类的方法及属性作用如图9所示。图9 Done类的详细信息图ParseHTML类:该类继承自Parse类,用于分析
41、网页并获取网页的标签。图10 ParseHTML类的详细信息图Parse类:该类继承自AttributeList类,主要用于分析文本文件,提取网页标签,在图11中,显示了该类中的各个方法的名称及作用。图11 Parse类的详细信息图GetPageCode类:用于获取指定URL的网页源码并保存到指定的本地磁盘。图12 GetPageCode类的详细信息图5.5运行测试运行测试,程序设计完成之后,测试本程序的各个功能是否达到预期的效果。程序运行后的主界面如图13所示:图13 程序运行主界面图在主界面点击“设置搜索范围”后,弹出如图14所示的窗口。图14 设置搜索范围图在该窗口上方的文本框里,可以输
42、入一个完整的网址,按“添加单个URL”按钮后,即将输入的网址添加到“已经添加的网址”列表框中,这里存放的地址即是待访问的网址,也就是初始URL集合。我们在添加URL时,可以把要添加的URL放在一个名为URLs.txt的文件里,这时,就可以按“导入URL集”,选择URLs.txt文件,即可把该文件里所有内容读取到“已经添加的网址”列表框中。若要从“已经添加的网址”的列表框中删除网址,可以选定一个网址然后单击“删除”按钮,即可删除选中的网址。单击“确定”按钮即完成搜索范围的设置,并自动关闭“设置搜索范围”的窗口。回到主界面后,可以选择“其他设置选项”按钮,进行其他方面的设置,其界面如图15所示。在
43、“基本”选项里可以设置程序运行时需要的线程数,设置索引存放目录,索引文件里存放的是爬行过的URL及其相关提取信息(关键词,标签等)。图15 其他设置选项图在“文件存放”选项里,可以设置下载下来经过过滤之后的网页文件存放目录,如图16所示。图16 文件存放图在“URL输出”这个选项里可以选择是否要显示处理的URL。当把这个选项选上时,在程序状态框里会显示正在处理的及处理过的URL,如图17所示。 图17 URL输出图经过这些设置后,单击确定即可完成所有选项的设置并自动关闭“其他设置选项”窗口然后回到程序主界面。在单击“开始爬取”按钮后,程序就开始运行并根据给定的初始URL集爬取其对应的网页。而在
44、单击“开始爬取”按钮后,此按钮会显示成“完成”。如图18所示,若再单击此按钮,则程序会停止爬取。在程序界面的下方,显示出当前爬取过的URL数,已用的爬取时间,未处理的文件个数。当单击“清空状态栏”按钮时,则在状态框里显示为空白。在完成爬取后,单击“退出程序”按钮后,则退出本程序。图18 爬行时的状态图蜘蛛程序是根据给定的URL集自动爬取网页,所以设计了定时爬取功能。“系统当前时间”显示的是程序所在服务器系统的当前时间,“定时爬取时间”是用户希望在某个时间爬取网页的时间。在用户完成搜索范围及其他设置选项后,用户可以在“定时爬取时间”的文本框里按照系统当前时间的格式输入时间,当系统当前时间到达用户
45、输入的定时爬取时间后,程序就触发“开始爬取”按钮事件,自动开始爬取网页,直到URL队列为空为止。 经测试,本程序对爬取数据量较小的校园网来说,可以正常运行,并能爬取得到相应的页面。6.总结随着Internet的迅速发展和校园网的普及壮大,网络上的信息资源成指数级增长,通用搜索引擎给我们查找网络信息提供了便利,但由于Web信息量的庞大以及各类信息的复杂性和人们需求的多样性,利用通用搜索引擎检索出的信息量庞大,不太适用于特定的服务领域。因此,本文就针对校园网用户来设计校园网搜索引擎中的网络蜘蛛模块,开发高性能的网络蜘蛛对于提高搜索引擎的整体性能起着至关重要的作用,也是研究和开发新一代的搜索引擎必然
46、要求。本文在阅读了大量国内外的关于搜索引擎及网络蜘蛛技术的文献基础上,分析了搜索引擎及网络蜘蛛的工作原理,利用相关技术实现了网络蜘蛛的分析与设计。搜索引擎的未来发展方向是专业化、智能化、个性化等方向,那么与其相应的网络蜘蛛设计也就向这些方向发展。如何提高蜘蛛程序优先爬取重要网页,提取重要的URL;研究新的,更好搜索策略,以进一步提高其工作效率;如何将信息抽取更加深层次的与信息检索相结合;随着网络上动态网页的不断增加,对动态网页的爬取是网页获取的难点和重点,有待于进一步研究。参考文献1 白岩,董琦,康红,周芮.网络搜索引擎J.吉林长春:信息化与网络建设,2006,(7):50-512 徐险峰.网
47、络信息检索搜索引擎技术及发展趋势J.湖南张家界:江西图书馆学刊,2005,35(4):64-663 彭建荣,罗永会.搜索引擎的基本原理及发展趋势J.云南大理:电脑知识技术,2006,(2):84-854 李铃.搜索引擎发展方向J.云南昆明:科技情报开发与经济,2005,15(21):247-2485 李盛韬,赵章界,余智华.基于主题的Web信息采集系统的设计与实现C.北京:中国科学院计算技术研究所软件研究室,2001 6 周军,迟呈英.基于校园网的中文搜索引擎系统J.鞍山:沈阳师范大学学报(自然科学版),2006,24(1):55-577 陈伟斌,张 鑫.一种基于校园网的元搜索引擎的研究与设计J.杭州:现代计算机,2005,(3):44-478 华伟臣,张秀琼.网络蜘蛛搜索研究J.四川乐山:乐山师范学院学报,2006,21(5):85-87
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922