搜索引擎研究---网络蜘蛛程序算法相关资料

搜索引擎研究---网络蜘蛛程序算法相关资料

ID:16209290

大小:27.34 KB

页数:17页

时间:2018-08-08

搜索引擎研究---网络蜘蛛程序算法相关资料_第1页
搜索引擎研究---网络蜘蛛程序算法相关资料_第2页
搜索引擎研究---网络蜘蛛程序算法相关资料_第3页
搜索引擎研究---网络蜘蛛程序算法相关资料_第4页
搜索引擎研究---网络蜘蛛程序算法相关资料_第5页
资源描述:

《搜索引擎研究---网络蜘蛛程序算法相关资料》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、何用C#语言构造蜘蛛程序 "蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载Web页面以便脱机使用,开发者利用蜘蛛程序扫描自己的Web检查无效的链接……对于不同的用户,蜘蛛程序有不同的用途。那么,蜘蛛程序到底是怎样工作的呢?  蜘蛛是一种半自动的程序,就象现实当中的蜘蛛在它的Web(蜘蛛网)上旅行一样,蜘蛛程序也按照类似的方式在Web链接织成的网上旅行。蜘蛛程序之所以是半自动的,是因为它总是需要一个初始链接(出发点),但此后的运行情况就要由它自己决定了,蜘蛛程序会扫

2、描起始页面包含的链接,然后访问这些链接指向的页面,再分析和追踪那些页面包含的链接。从理论上看,最终蜘蛛程序会访问到Internet上的每一个页面,因为Internet上几乎每一个页面总是被其他或多或少的页面引用。  本文介绍如何用C#语言构造一个蜘蛛程序,它能够把整个网站的内容下载到某个指定的目录,程序的运行界面如图一。你可以方便地利用本文提供的几个核心类构造出自己的蜘蛛程序。  C#特别适合于构造蜘蛛程序,这是因为它已经内置了HTTP访问和多线程的能力,而这两种能力对于蜘蛛程序来说都是非常关键的。下面是构造一个蜘蛛程序要解决的关键问题:  ⑴HTML分析:需要某种HTML解析器来分析蜘蛛

3、程序遇到的每一个页面。  ⑵页面处理:需要处理每一个下载得到的页面。下载得到的内容可能要保存到磁盘,或者进一步分析处理。  ⑶多线程:只有拥有多线程能力,蜘蛛程序才能真正做到高效。  ⑷确定何时完成:不要小看这个问题,确定任务是否已经完成并不简单,尤其是在多线程环境下。  一、HTML解析  C#语言本身不包含解析HTML的能力,但支持XML解析;不过,XML有着严格的语法,为XML设计的解析器对HTML来说根本没用,因为HTML的语法要宽松得多。为此,我们需要自己设计一个HTML解析器。本文提供的解析器是高度独立的,你可以方便地将它用于其它用C#处理HTML的场合。  本文提供的HTML

4、解析器由ParseHTML类实现,使用非常方便:首先创建该类的一个实例,然后将它的Source属性设置为要解析的HTML文档:ParseHTMLparse=newParseHTML();parse.Source="HelloWorld";  接下来就可以利用循环来检查HTML文档包含的所有文本和标记。通常,检查过程可以从一个测试Eof方法的while循环开始:while(!parse.Eof()){charch=parse.Parse();  Parse方法将返回HTML文档包含的字符--它返回的内容只包含那些非HTML标记的字符,如果遇到了HTML标记,Parse方法将返回0值,表示现在

5、遇到了一个HTML标记。遇到一个标记之后,我们可以用GetTag()方法来处理它。if(ch==0){HTMLTagtag=parse.GetTag();}  一般地,蜘蛛程序最重要的任务之一就是找出各个HREF属性,这可以借助C#的索引功能完成。例如,下面的代码将提取出HREF属性的值(如果存在的话)。Attributehref=tag["HREF"];stringlink=href.Value; 获得Attribute对象之后,通过Attribute.Value可以得到该属性的值。二、处理HTML页面  下面来看看如何处理HTML页面。首先要做的当然是下载HTML页面,这可以通过C#提

6、供的HttpWebRequest类实现:HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(m_uri);response=request.GetResponse();stream=response.GetResponseStream();  接下来我们就从request创建一个stream流。在执行其他处理之前,我们要先确定该文件是二进制文件还是文本文件,不同的文件类型处理方式也不同。下面的代码确定该文件是否为二进制文件。if(!response.ContentType.ToLower().StartsWith("text/")

7、){SaveBinaryFile(response);returnnull;}stringbuffer="",line; 如果该文件不是文本文件,我们将它作为二进制文件读入。如果是文本文件,首先从stream创建一个StreamReader,然后将文本文件的内容一行一行加入缓冲区。reader=newStreamReader(stream);while((line=reader.ReadLine())!=null){bu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。