优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

网络蜘蛛程序

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

摘  要
在互联网发展初期,网站相对较少,信息查找比较容易。然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运而生了。网络蜘蛛程序是Web搜索引擎技术中关键的一部分。
本论文基于现有的知识理论实现了蜘蛛程序,从给定网址开始进行爬行搜索,利用数据库队列技术管理网页链接,将访问过的网页资源下载到本地硬盘保存。通过使用Lucene工具包对下载资源。利用java.url中的类实现Spider程序与外界通讯,以及处理网页中的URL连接,对蜘蛛程序的核心类(通讯核心、蜘蛛程序工作核心),资源索引的建立与搜索新型了详细的研究。
通过设计分析,完成了自己的蜘蛛爬行程序。程序按照初始设计功能完成,实现了对网络资源的收集和整理。功能通过了测试,程序可以正常稳定运行
最后论文对全文进行了总结,并对为了发展的方向进行了展望。 [资料来源:http://think58.com]

关键字:HTTP,线程,Spider,Lucene
程序设计与实现、测试
3.1 HTTP类及相关类的设计与实现
Java对外通讯类主要承担了与网站建立连接、分析网页并从中提取所有连接的URL。在编写程序代码的时候,利用了java包中的URL类来实现建立连接和抓取URL的功能。
Java提供了许多支持Internet;连接的类URL类就是其中之一。在使用URL类之前,必须创建一个URL对象。创建的方法是使用其构造函数。通过向其指定一个URL地址,就能实例化该类。如:URL url = new URL(”http://www.baidu.com”)如果传递无效的URL给URL 对象,该对象会抛出formedURLException异常,当成功创建一个URL对象后,我们调用openConnection()函数建立与URL的通信,此时,我们就获得了一个URLConnection对象的引用[7]。URLConnection类包含了许多与网络上的URL通信的函数。在下载网页前,我们需要判断目标网页是否存在,这时调用URLXConnection类的getHeaderField()方法,获得服务器返回给Spider程序的响应码。如果响应码包含20?字样,表示目标网页存在,下一步就下载网页。 否则就不下载。getHeaderField()方法仅仅获得服务器返回的头标志,其通信开销是最小的。因此在下载网页前进行此测试,不仅能减小网络流量。而且能提高程序效率。当目标网页存在时,调用URLConnection类的getInputStream()函数明确打开到URL的连接,获取输入流。再用java.io包中的InputStreamReader类读取该输入流,将网页下载下来。 本文来自think58 [资料来源:http://THINK58.com]
URL即“统一资源定位符”,是代表Internet上资源的地址。它为流览器或其他程序提供一个URL地址以便于在网上访问文件。URL 地址由两部分组成:协议标志符和资源名。如http://bbs.hnu.cn/index.htm这个URL地址中http是协议标志符,http是典型的建立在TCP/IP协议之上的超文本传输协议。本文的蜘蛛程序支持该协议bbs.hnu.cn/index.htm为资源名。该资源名又可分为主名bbs.hnu.cn和文件名index.htm。为了使蜘蛛程序能沿着URL遍历一个网站中所有的网页,我们必须抽取出网页中所有包含的URL地址。抽取的过程很简单,只要遍历一下下载来的网页href后的字符串就是URL,这些URL可分为绝对URL和相对URL。因此我们必须对它们进行解析。绝对URL 如210.43.105.XX可以直接使用。相对URL主要有以下几种形式/filename.htm和../filename.htm形式,表示该文件存在于根目录下。如210.43.105.XX /filename.htm中包含一个相对URL为www.hnu.cn则其经过解析后的绝对URL为210.43.105.XX /filename.htm。/filename.htm形式,表示该文件存在于当前目录下。如http://210.43.105.XX /filename.htm中包含一个相对URL210.43.105.XX/filename.htm则其经过解析后的绝对URL210.43.105.XX/file/filename.htm。由上可知,如果不进行正确的URL解析,蜘蛛程序将难以完成任务。

[资料来源:http://THINK58.com]


蜘蛛程序工作核心类设计与实现
3.2.1 蜘蛛程序中线程的设计
Java的线程从产生到消失,可分为四个状态:
1、新建状态:线程在已被创建但尚未执行这段时间内,处于新建状态。此时,线程对象已被分配内存空间,私有数据已被初始化,但没有给其分配系统资源且线程未被调度。处于此状态的线程,可以通过调用start()或stop()函数来开始线程或终止线程[8]。
2、运行状态:处于此状态的线程,说明它已取得处理器的控制权,正在执行中。
3、不能运行状态:当线程休眠,被挂起或等待某一资源时,它便进入不能运行状态。如果休眠时间过去,或已获得等待的资源,便重新进入运行状态。
4、死状态:当线程正常终止或强行终止时,进入死状态。此时,线程放弃所拥有的所有资源。
3.2.2 多线程同步
当同时运行的相互独立的线程需要共享数据并且需要考虑其他线程的状态时,就需要使用一套机制使得这些线程同步,避免在争用资源时发生冲突,甚至发生死锁。Java提供了多种机制以实现线程同步。多数java 同步是以对象锁定为中心的。Java中从Object对象继承来的每个对象都有一个单独的锁。由于java中的每个对象都是从Object继承来的。所以java 中的每个对象都有自己的锁。这样使它在共享的线程之间可以相互协调。Java中实现线程同步的另一个方法是通过使用synchronized关键字。Java使用synchronized关键字来定义程序中要求线程同步的部分。synchronized关键字实现的基本操作是把每个需要线程同步的部分定义为一个临界区,在临界区中同一时刻只有一个线程被执行[8]。

[资料来源:http://www.THINK58.com]


为了使蜘蛛程序高效地运行,蜘蛛程序的工作访问众多的网页,被分成小的字任务,然后把这些任务分给不同的线程。这些线程相互通信以确定获得新的工作,并把没有完成的工作当作新的工作,而且我们要确保一个URL不被多个线程访问。因此,我们创建一个类来管理各种URL各个线程共享这些URL,这些URL称为临界资源,任一时刻只允许一个线程拥有该资源,该类中从等待队列中取出一个URL的操作方法被定义为synchronized即同一时刻只能有一个线程从等待队列中取出URL并把该URL移入运行队列。这个线程操作完后,释放它拥有的等待队列,以便其他线程有机会使用,正是以这种机制,使的n个线程同步运行。给出伪代码:
for ( ;; ) {
      target = 获得等待队列中的URL;
      if 等待队列为空
        结束程序;
      此线程开始工作,并将读取到的URL加入到处理队列;
      分析网页
      此URL结束,将URL加入到完成或者错误队列;
    }
利用非递归队列管理,可以大大提高程序的效率,在测试中发现在同样的硬件环境下,利用非递归程序可以搜索上万个网页,而递归程序只能访问一两千个网页。 think58.com [资料来源:http://think58.com]
3.3 Spider类及其相关类的实现
Spider(附录已给出代码)是程序的核心类之一,它将蜘蛛程序中的其他类组合在一起,在这个类中包含很多起借口作用的方法,可以通过它命令蜘蛛程序。ISpiderReportable和IWorkloadStorable是制定蜘蛛程序操作的两个接口。
think58
[资料来源:www.THINK58.com]