1 / 11
文档名称:

蜘蛛简介.doc

格式:doc   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

蜘蛛简介.doc

上传人:xxj16588 2016/6/4 文件大小:0 KB

下载得到文件列表

蜘蛛简介.doc

相关文档

文档介绍

文档介绍:蜘蛛简介" 蜘蛛"( Spider )是 上一种很有用的程序,搜索引擎利用蜘蛛程序将 Web 页面收集到数据库, 企业利用蜘蛛程序监视竞争对手的网站并跟踪变动, 个人用户用蜘蛛程序下载 Web 页面以便脱机使用, 开发者利用蜘蛛程序扫描自己的 Web 检查无效的链接……对于不同的用户, 蜘蛛程序有不同的用途。那么, 蜘蛛程序到底是怎样工作的呢? 蜘蛛是一种半自动的程序, 就象现实当中的蜘蛛在它的 Web (蜘蛛网) 上旅行一样, 蜘蛛程序也按照类似的方式在 Web 链接织成的网上旅行。蜘蛛程序之所以是半自动的, 是因为它总是需要一个初始链接( 出发点), 但此后的运行情况就要由它自己决定了, 蜘蛛程序会扫描起始页面包含的链接, 然后访问这些链接指向的页面, 再分析和追踪那些页面包含的链接。从理论上看,最终蜘蛛程序会访问到 上的每一个页面, 因为 上几乎每一个页面总是被其他或多或少的页面引用。本文介绍如何用 C# 语言构造一个蜘蛛程序,它能够把整个网站的内容下载到某个指定的目录, 程序的运行界面如图一。你可以方便地利用本文提供的几个核心类构造出自己的蜘蛛程序。图1 C# 特别适合于构造蜘蛛程序,这是因为它已经内置了 HTTP 访问和多线程的能力,而这两种能力对于蜘蛛程序来说都是非常关键的。下面是构造一个蜘蛛程序要解决的关键问题: ⑴ HTML 分析:需要某种 HTML 解析器来分析蜘蛛程序遇到的每一个页面。⑵页面处理:需要处理每一个下载得到的页面。下载得到的内容可能要保存到磁盘,或者进一步分析处理。⑶多线程: 只有拥有多线程能力, 蜘蛛程序才能真正做到高效。⑷确定何时完成:不要小看这个问题,确定任务是否已经完成并不简单,尤其是在多线程环境下。一、 HTML 解析 C# 语言本身不包含解析 HTML 的能力,但支持 XML 解析;不过, XML 有着严格的语法,为 XML 设计的解析器对 HTML 来说根本没用, 因为 HTML 的语法要宽松得多。为此, 我们需要自己设计一个 HTML 解析器。本文提供的解析器是高度独立的, 你可以方便地将它用于其它用 C# 处理 HTML 的场合。本文提供的 HTML 解析器由 ParseHTML 类实现,使用非常方便: 首先创建该类的一个实例,然后将它的 Source 属性设置为要解析的 HTML 文档: ParseHTML parse = new ParseHTML(); = "<p>Hello World</p>"; 接下来就可以利用循环来检查 HTML 文档包含的所有文本和标记。通常,检查过程可以从一个测试 Eof 方法的 while 循环开始: while(!()) { char ch= (); Parse 方法将返回 HTML 文档包含的字符-- 它返回的内容只包含那些非 HTML 标记的字符, 如果遇到了 HTML 标记, Parse 方法将返回 0 值,表示现在遇到了一个 HTML 标记。遇到一个标记之后,我们可以用 GetTag() 方法来处理它。 if(ch==0) { HTMLTag tag = (); } 一般地,蜘蛛程序最重要的任务之一就是找出各个 HREF 属性, 这可以借助 C# 的索引功能完成。例如, 下面的代码将提取出 HREF 属性的值(如果存在的话)。 Attribute href = tag["HREF"]; string link = ; 获得 Attribute 对象之后, 通过 可以得到该属性的值。二、处理 HTML 页面下面来看看如何处理 HTML 页面。首先要做的当然是下载 HTML 页面,这可以通过 C# 提供的 HttpWebRequest 类实现: HttpWebRequest request = (HttpWebRequest)(m_uri); response = (); stream = (); 接下来我们就从 request 创建一个 stream 流。在执行其他处理之前, 我们要先确定该文件是二进制文件还是文本文件, 不同的文件类型处理方式也不同。下面的代码确定该文件是否为二进制文件。 if( !().StartsWith("text/") ) { SaveBinaryFile(response); return null; } string buffer = "",line; 如果该文件不是文本文件, 我们将它作