网络机器人.docx

上传人:sk****8 文档编号:3160789 上传时间:2019-05-23 格式:DOCX 页数:6 大小:20.88KB
下载 相关 举报
网络机器人.docx_第1页
第1页 / 共6页
网络机器人.docx_第2页
第2页 / 共6页
网络机器人.docx_第3页
第3页 / 共6页
网络机器人.docx_第4页
第4页 / 共6页
网络机器人.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、网络机器人3.1 什么是网络机器人网络机器人又称为 Spider 程序,是一种专业的 Bot 程序。用于查找大量的 Web 页面。它从一个简单的 Web 页面上开始执行,然后通过其超链接在访问其他页面,如此反复理论上可以扫描互联网上的所有页面。基于因特网的搜索引擎是 Spider 的最早应用。例如搜索巨头 Google 公司,就利用网络机器人程序来遍历 Web 站点,以创建并维护这些大型数据库。网络机器人还可以通过扫描 Web 站点的主页来得到这个站点的文件清单和层次机构。还可以扫描出中断的超链接和拼写错误等。3.2 网络机器人的结构分析Internet 是建立在很多相关协议基础上的,而更复杂

2、的协议又建立在系统层协议之 上。Web 就是建立在 HTTP ( Hypertext Transfer Protocol ) 协议基础上,而 HTTP 又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 协议之上,它同时也是一种Socket 协议。所以网络机器人本质上是一种基于 Socket 的网络程序。3.2.1 如何解析 HTML因为 Web 中的信息都是建立在 HTML 协议之上的,所以网络机器人在检索网页时的第一个问题就是如何解析 HTML。在解决如何解析之前,先来介绍下 HTML 中的几种数据。文本:除了

3、脚本和标签之外的所有数据注释:程序员留下的说明文字,对用户是不可见的简单标签:由单个表示的 HTML 标签开始标签和结束标签:用来控制所包含的 HTML 代码我们在进行解析的时候不用关心所有的标签,只需要对其中几种重要的进行解析即可。超连接标签超连接定义了 WWW 通过 Internet 链接文档的功能。他们的主要目的是使用户能够任意迁移到新的页面,这正是网络机器人最关心的标签。图像映射标签图像映射是另一种非常重要的标签。它可以让用户通过点击图片来迁移到新的页面中。表单标签表单是 Web 页面中可以输入数据的单元。许多站点让用户填写数据然后通过点击按钮来提交内容,这就是表单的典型应用。表格标签

4、表格是 HTML 的构成部分,通常用来格式化存放、显示数据。我们在具体解析这些 HTMl 标签有两种方法:通过 JavaTM 中的 Swing 类来解析或者通过 Bot 包中的 HTMLPage 类来解析,本人在实际编程中采用后者。Bot 包中的 HTMLPage 类用来从指定 URL 中读取数据并检索出有用的信息。下面给出该类几种重要的方法。HTMLPage 构造函数 构造对象并指定用于通讯的 HTTP 对象Public HTMLPage(HTTP http)GetForms 方法 获取最后一次调用 Open 方法检索到的表单清单Public Vector getForms()GetHTTP

5、 方法 获取发送给构造函数的 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 程序结构网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。程序首先解析网页的 HT

6、ML 代码,查找该页面内的超连接然后通过递归和非递归两种结构来实现 Spider 程序。递归结构递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费内存且不能使用多线程技术,故不适合大型项目。非递归结构这种方法使用队列的数据结构,当 Spider 程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当 Spider 程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。虽然这里只描述了一个队列,但在实际编程中用到了四个队列,他们每个队列都保存着同一处理状态的 URL。等待队列 在这个队列中,URL 等待被 Spider 程序处理。新发现的 URL 也被加入

7、到这个队列中处理队列 当 Spider 程序开始处理时,他们被送到这个队列中错误队列 如果在解析网页时出错,URL 将被送到这里。该队列中的 URL 不能被移入其他队列中完成队列 如果解析网页没有出错,URL 将被送到这里。该队列中的 URL 不能被移入其它队列中在同一时间 URL 只能在一个队列中,我们把它称为 URL 的状态。以上的图表示了队列的变化过程,在这个过程中,当一个 URL 被加入到等待队列中时 Spider 程序就会开始运行。只要等待队列中有一个网页或 Spider 程序正在处理一个网页,程序就会继续他的工作。当等待队列为空并且当前没有任何网页时,Spider 程序就会停止它的

8、工作。3.2.3 如何构造 Spider 程序在构造 Spider 程序之前我们先了解下程序的各个部分是如何共同工作的。以及如何对这个程序进行扩展。流程图如下所示:IspiderReportable 接口这是一个必须实现的接口,可以通过回调函数接受 Spider 所遇到的页面。接口定义了 Spider 向他的控制者发送的几个事件。通过提供对每个事件的处理程序,可以创建各种 Spider 程序。下面是他的接口声明: public interface IspiderReportable public boolean foundInternalLink(String url); public boo

9、lean 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 程序是非常重要的。下面就来介绍下几种

10、提高性能的技术:Java 的多线程技术线程是通过程序的一条执行路线。多线程是一个程序同时运行多个任务的能力。它是在一个程序的内部进行分工合作。优化程序的通常方法是确定瓶颈并改进他。瓶颈是一个程序中最慢的部分,他限制了其他任务的运行。据个例子说明:一个 Spider 程序需要 下载十个页面,要完成这一任务,程序必须向服务器发出请求然后接受这些网页。当程序等待响应的时候其他任务不能执行,这就影响了程序的效率。如果用多线程技术可以让这些网页的等待时间合在一起,不用互相影响,这就可以极大的改进程序性能。数据库技术当 Spider 程序访问一个大型 Web 站点时,必须使用一种有效的方法来存储站点队列。

11、这些队列管理 Spider 程序必须维护大型网页的列表。如果把他们放在内存中将会是性能下降,所以我们可以把他们放在数据库中减少系统资源的消耗。3.2.5 网络机器人的代码分析程序代码实现如下:1. package news; 2. /* 3. * 新闻搜索引擎 4. * 计算机 99630 沈晨 5. * 版本 1.0 6. */ 7. import com.heaton.bot.HTTP; 8. import com.heaton.bot.HTTPSocket; 9. import com.heaton.bot.ISpiderReportable; 10. import com.heaton

12、.bot.IWorkloadStorable; 11. import com.heaton.bot.Spider; 12. import com.heaton.bot.SpiderInternalWorkload; 13. /* 14. * 构造一个 Bot 程序 15. */ 16. public class Searcher 17. implements ISpiderReportable 18. public static void main(String args) throws Exception 19. IWorkloadStorable wl = new SpiderIntern

13、alWorkload(); 20. Searcher _searcher = new Searcher(); 21. Spider _spider 22. = new Spider(_searcher, “http:/127.0.0.1/news.htm“, 23. new HTTPSocket(), 100, wl); 24. _spider.setMaxBody(100); 25. _spider.start(); 26. 27. / 发现内部连接时调用,url 表示程序发现的 URL,若返回 true 则加入作业中,否则不加入。 28. public boolean foundInter

14、nalLink(String url) 29. return false; 30. 31. / 发现外部连接时调用,url 表示程序所发现的 URL,若返回 true 则把加入作业中,否则不加入。 32. public boolean foundExternalLink(String url) 33. return false; 34. 35. / 当发现其他连接时调用这个方法。其他连接指的是非 HTML 网页,可能是E-mail 或者 FTP 36. public boolean foundOtherLink(String url) 37. return false; 38. 39. / 用

15、于处理网页,这是 Spider 程序要完成的实际工作。 40. public void processPage(HTTP http) 41. System.out.println(“扫描网页:“ + http.getURL(); 42. new HTMLParse(http).start(); 43. 44. / 用来请求一个被处理的网页。 45. public void completePage(HTTP http, boolean error) 46. 47. / 由 Spider 程序调用以确定查询字符串是否应删除。如果队列中的字符串应当删除,方法返回真。 48. public boolean getRemoveQuery() 49. return true; 50. 51. / 当 Spider 程序没有剩余的工作时调用这个方法。 52. public void spiderComplete() 53. 54. 3.3 小节在本章中,首先介绍了网络机器人的基本概念,然后具体分析了 Spider 程序的结构和功能。在最后还结合具体代码进行了详细说明。本人在编程中运用了 Java 技术,主要涉及到了 net 和 io 两个包。此外还用了第三方开发包 Bot(由 Jeff Heaton 提供的开发包)。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 建筑建材

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。