校园网搜索引擎的分析与设计_第1页
校园网搜索引擎的分析与设计_第2页
校园网搜索引擎的分析与设计_第3页
校园网搜索引擎的分析与设计_第4页
校园网搜索引擎的分析与设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论