基于java的网络蜘蛛程序算法研究内容摘要:

器人程序必须能够找到保存在它所访问的每个网页上的链接。 网络机器人程序通过分析网页的 HTML代码查找网页内所有链接到其它网页的标签,根据标签的属性 HREF(Hypertext Reference,超文本链接 )的值,网络机器人程序将会遇到三种链接类型:内部链接( Internal link)、外部链接 (External link)和其它连接 (other link)。 内部链接指的是超链接所指向的网页与包含该链接的网页在同一台 Web 服务器中;外部链接指的是超链接所指向的网页所在的 Web 站点与包含该链接的 Web 站点不同;其它链接指的是超链接指向非网页的资源,如指向 Email地址等。 程序的设计思想 开发和设计网络机器人程序有两种思想可以选择:一种就是将程序设计为递归的程序;另一种就是将程序设计为非递归的程序。 采用递归设计的程序思路清晰简单,但存在两个主要的问题:第一问题就是如果程序要运行很多次,被压入递归的堆栈会变得非常大,它可能会耗尽整个堆栈的内存并终 止程序的运行;第二问题就是多线程技术与递归技术不能兼容。 所以开发高性能的网络机器人程序不能采用递归的程序设计思想。 我们研究的高性能网络机器人采用的是非递归程序设计思想,当使用非递归的方法时,先给定网络机器人一个要访问的网页集合,它会把这一集合加到它将要访问站点的队列中去。 网络机器人发现每个新的网页时不使用调用自身的方法,而是将新发现的链接加入到该队列中。 当网络机器人处理完当前的网页后,它会在队列中查找要处理的下一页。 实际工作的时候网络机器人总共使用了四个队列,每个这样的队列保存着同一处理状态的 URL,它 们如下: 等待队列 :在这个队列中, URL 等待被网络机器人处理。 新发现的 URL 被加入到这个队列。 处理队列 :当网络机器人开始处理时,它们被传送到这个队列。 当一个 URL 被处理后,它被移送到错误队列或者完成队列中。 错误队列 :如果在处理该网页时发生了错误,它的 URL 将被加入到错误队列中。 网络机器人将不会对加入到错误队列的网页做进一步地处理。 完成队列 :如果在下载网页时没有发生错误,该 URL 将被加入到完成队列中。 加入到完成队列中的 URL将不会再移入其他队列中。 URL 处理状态流程图 : 发现 URL 错误队列 完成 URL 完成队列 等待队列 处理队列 图 1 URL 处理状态流程图 算法分析 我 们的算法设计主要就是依据非递归的思想构造的,当一个 URL 被加入到等待队列中时,网络机器人就会开始运行。 只要等待队列中有一个网页或网络机器人正在处理一个网页,网络机器人就会继续它的工作。 当等待队列为空并且当前没有处理任何网页,网络机器人就会停止它的工作。 基本的算法如下所示: Initialize URLS。 //用一个 URL 集合初始化网络机器人。 Queue enum{WaitQ,FinishQ,RunQ,MistakeQ}。 //队列类型:等待、完成、处理、错误队列。 FileText。 LinkType enum{InternalLink,ExternalLink,OtherLink}。 //超链类型:内部、外部、其他链接。 Begin For url in URLS Do PopQueue(url,WaitQ)。 //初始化 URL 集合被加入到等待队列中。 While WaitQ is not empty Do//判断等待队列是否有 URL.。 Begin。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。