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