java搜索引擎的研究与实现 第3页
表单标签
表单是Web页面中可以输入数据的单元。许多站点让用户填写数据然后通过点击按钮来提交内容,这就是表单的典型应用。
表格标签
表格是HTML的构成部分,通常用来格式化存放、显示数据。
我们在具体解析这些HTMl标签有两种方法:通过JavaTM中的Swing类来解析或者通过Bot包中的HTMLPage类来解析,本人在实际编程中采用后者。
Bot包中的HTMLPage类用来从指定URL中读取数据并检索出有用的信息。下面给出该类几种重要的方法。
HTMLPage构造函数 构造对象并指定用于通讯的HTTP对象
Public HTMLPage(HTTP http)
GetForms方法 获取最后一次调用Open方法检索到的表单清单
Public Vector getForms()
GetHTTP方法 获取发送给构造函数的HTTP对象
Public HTTP getHTTP()
GetImage方法 获取指定页面的图片清单
Public Vector getImage()
GetLinks方法 获取指定页面的连接清单
Public Vector getLinks()
Open方法 打开一个页面并读入该页面,若指定了回调对象则给出所有该对象数据
Public void open(String url,HTMLEditorKit.ParserCallback a)
3.2.2 Spider程序结构
网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。程序首先解析网页的HTML代码,查找该页面内的超连接然后通过递归和非递归两种结构来实现Spider程序。
递归结构
递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费内存且不能使用多线程技术,故不适合大型项目。
非递归结构
这种方法使用队列的数据结构,当Spider程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当Spider程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。
虽然这里只描述了一个队列,但在实际编程中用到了四个队列,他们每个队列都保存着同一处理状态的URL。
等待队列 在这个队列中,URL等待被Spider程序处理。新发现的URL也被加入到这个队列中
处理队列 当Spider程序开始处理时,他们被送到这个队列中
错误队列 如果在解析网页时出错,URL将被送到这里。该队列中的URL不能被移入其他队列中
完成队列 如果解析网页没有出错,URL将被送到这里。该队列中的URL不能被移入其它队列中
在同一时间URL只能在一个队列中,我们把它称为URL的状态。
以上的图表示了队列的变化过程,在这个过程中,当一个URL被加入到等待队列中时Spider程序就会开始运行。只要等待队列中有一个网页或Spider程序正在处理一个网页,程序就会继续他的工作。当等待队列为空并且当前没有任何网页时,Spider程序就会停止它的工作。
3.2.3如何构造Spider程序
在构造Spider程序之前我们先了解下程序的各个部分是如何共同工作的。以及如何对这个程序进行扩展。
流程图如下所示:
IspiderReportable接口
这是一个必须实现的接口,可以通过回调函数接受Spider所遇到的页面。接口定义了Spider向他的控制者发送的几个事件。通过提供对每个事件的处理程序,可以创建各种Spider程序。下面是他的接口声明:
public interface IspiderReportable{
public boolean foundInternalLink(String url);
public boolean foundExternalLink(String url);
public boolean foundOtherLink(String url);
public void processPage(HTTP page);
public void completePage(HTTP page,boolean error);
public boolean getRemoveQuery();
public void SpiderComplete();}
3.2.4如何提高程序性能
Internet中拥有海量的Web页面,如果开发出高效的Spider程序是非常重要的。下面就来介绍下几种提高性能的技术:
Java的多线程技术
线程是通过程序的一条执行路线。多线程是一个程序同时运行多个任务的能力。它是在一个程序的内部进行分工合作。
优化程序的通常方法是确定瓶颈并改进他。瓶颈是一个程序中最慢的部分,他限制了其他任务的运行。据个例子说明:一个Spider程序需要下载十个页面,要完成这一任务,程序必须向服务器发出请求然后接受这些网页。当程序等待响应的时候其他任务不能执行,这就影响了程序的效率。如果用多线程技术可以让这些网页的等待时间合在一起,不用互相影响,这就可以极大的改进程序性能。
数据库技术
当Spider程序访问一个大型Web站点时,必须使用一种有效的方法来存储站点队列。这些队列管理Spider程序必须文护大型网页的列表。如果把他们放在内存中将会是性能下降,所以我们可以把他们放在数据库中减少系统资源的消耗。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
java搜索引擎的研究与实现 第3页下载如图片无法显示或论文不完整,请联系qq752018766