论文部分内容阅读
摘 要:网络蜘蛛是现代搜索引擎获得网络信息的重要手段,直接影响到搜索引擎的查全率,C#是微软发布的开发平台.NET中的旗舰,本文设计了一种简易的网络蜘蛛并通过C#语言将其实现。
关键词:C#.NET 线程 网络蜘蛛 排序算法
中图分类号:TP311 文献标识码:B 文章编号:1673-8454(2008)21-0069-03
目前,对于全球大多数互联网用户来说,搜索引擎是其准确获得所需要信息或者知识的最有效的工具。但是对于所有的搜索引擎来说,最重要的性能指标有两个:查全率和查准率。查全率和搜索引擎搜集的网页数量和质量有关,而查准率和搜索引擎所采用的导航方式及排序算法有关。
本文介绍的是将搜索引擎用于搜集网页,提高查全率的最重要的工具——网络蜘蛛(Web Spider),也称网络机器人(Web Robot)。网络蜘蛛的主要作用是搜集互联网的网页,我们也可以用它来定期搜集某个网站的内容,来跟踪判断网站的发展,或者做站内搜索引擎。从网络蜘蛛的工作原理来看,“网络蜘蛛”是一个比较形象的名字,它是在互联网内,通过网页链接,从一个网页爬到另一个网页来进行网页内容搜集的工具。它的工作通常是这样进行的:在一个网页上,把这个网页的内容收集入数据库,分析这个网页的链接,根据链接进入另一个网页。再进行上面的操作,直到把这个网站的页面全部搜集完,转入下一个网站。
图2 Spider工作流程
BFS算法
Begin
Visit Index
Push clientnode.child into the end of Unvisitedqueue;
If(Unvisitedqueue!=null)
{
Visit the top of Unvisitedqueue;
Clientnode= Unvisitedqueue.top;
Visit Clientnode;
Push clientnode into visitedqueue;
}
End
上述这三个部分都能够实现的话,网络蜘蛛完整工作流程如图2所示。
对于网络蜘蛛的工作流程,如图2所示,网络蜘蛛首先获得一个URL,根据已经处理的URL数据库来判断该URL是否被处理过,如果没有处理过,则解析这个页面,提取这个页面链接页面的URL,然后下载当前页面,同时把当前页面的URL添加到已经处理的数据库中,然后根据选择的遍历算法向Spider提交下一个URL。如果在URL判断中,这个页面已经被处理过,那么直接根据选择的遍历算法向Spider提交下一个URL。为什么要在Spider运行前加一个判断,因为不同的网页可能拥有同一个链接,避免重复处理。
二、各个模块的实现
对于图2所描述的网络蜘蛛来说,实现网络蜘蛛的最重要的三个模块是HTML的解析、页面下载以及网页遍历。对于网页遍历的BFS算法上文中已经描述过了,所以这里重点介绍在C#中如何实现HTML解析和网页下载模块。
1.HTML的解析
对于网络蜘蛛来说,网页信息中最有价值的信息是网页的链接和网页的内容。网页的链接(Internal Links),关系到网络蜘蛛下一步爬行的页面,网页内容则是网络蜘蛛获取的网页所显示的文字或图像内容。
对于网络蜘蛛来说,如何分析、获得网页信息是很重要的一环,在C#中可以用System.Net.WebClient这个方法来获得网页的内容,然后使用URL正则表达式分析Html中的链接。用这种方法来获取网页的链接信息,网页的链接信息是网络蜘蛛进行判断下一步遍历目标,选择遍历路径的重要已知条件。
而另一种方法就是调用.NET的一个类库——HtmlParser这个开源类库可以几乎解析所有的HTML标签。HtmlParser对HTML进行了4级封装,从低级到高级的顺序为:ParserStream、Source、Page、Lexer。其中 ParserStream负责从文件中获取二进制数据,但不做任何处理。Source把二进制文件转换成相应的字符序列,存储一组未加工的字符序列。
2.页面下载模块的实现
图3 简单的网络蜘蛛
在C#中,网页下载是通过HttpWebRequest类来实现的,HttpWebRequest使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持,而其中的GetResponse 方法返回包含来自 Internet 资源的响应的 WebResponse 对象,可以用于页面资源获取。下面则是网页下载中的核心部分,网页的HTML代码的获取。
public string GetPageSource(string url)//获取网页的html代码
{
Uri uri=new Uri(url);
HttpWebRequest MyReq=(HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse MyRes=(HttpWebResponse) MyReq.GetResponse();
MyReq.Method="Post";
MyReq.KeepAlive=false;
StreamReader
reader=new StreamReader(MyRes.GetResponseStream(),System.Text.Encoding.GetEncoding("GB2312"));
return reader.ReadToEnd();
}
图3是笔者根据本文所述实现的一个简易的网络蜘蛛,该网络蜘蛛能对指定的网站进行爬行和页面下载,而此网络蜘蛛下载的页面是保存在指定的路径中,如果要是方便以后进一步建立索引,对页面信息进行处理的话,也可以把网站和页面信息保存在数据库中。
另外一个问题就是网络蜘蛛的爬行周期,太长的话,会影响网络信息的时效性,太短的话,第一技术上实现比较难,第二对网站服务器也增加了不少负担。一般网络蜘蛛的爬行周期设为7~15天之间。并且完成若干个周期之后,网络蜘蛛也不必把已经抓过的网页每次都重新抓取,只需比较网页的属性和上次抓取的有无不同,如果相同也就是没有更新,则不必抓取,如果不同则进行抓取更新。
三、小结
网络蜘蛛是搜集WEB资源信息情报的非常有效的工具。随着互联网资源的日益丰富,网络蜘蛛在情报资源获取方面会起到越来越重要的作用。[4]本文结合C#语言介绍了网络蜘蛛的设计和构建,实现了一种可以实用的网络蜘蛛。在以后的研究中,如何用网络蜘蛛在网页上获取更多和更准确的信息,提供更丰富的检索信息,以及如何提高网络蜘蛛的爬行和抓取效率是我们进一步努力的方向。
参考文献:
[1]宋晖,张岭,叶允明.基于标记树对象抽取技术的Hidden Web获取研究[J].计算机工程与应用,2002(23).
[2]于满泉.基于分块的网页信息解析器的研究与设计[J].计算机应用,2005(4).
[3]赫枫龄.用有向图法解决网页爬行中循环链接问题[J].吉林大学学报,2004(3).
[4]陈先.智能搜索引擎关键技术研究与实现[J].哈尔滨工程大学,2003(2).
关键词:C#.NET 线程 网络蜘蛛 排序算法
中图分类号:TP311 文献标识码:B 文章编号:1673-8454(2008)21-0069-03
目前,对于全球大多数互联网用户来说,搜索引擎是其准确获得所需要信息或者知识的最有效的工具。但是对于所有的搜索引擎来说,最重要的性能指标有两个:查全率和查准率。查全率和搜索引擎搜集的网页数量和质量有关,而查准率和搜索引擎所采用的导航方式及排序算法有关。
本文介绍的是将搜索引擎用于搜集网页,提高查全率的最重要的工具——网络蜘蛛(Web Spider),也称网络机器人(Web Robot)。网络蜘蛛的主要作用是搜集互联网的网页,我们也可以用它来定期搜集某个网站的内容,来跟踪判断网站的发展,或者做站内搜索引擎。从网络蜘蛛的工作原理来看,“网络蜘蛛”是一个比较形象的名字,它是在互联网内,通过网页链接,从一个网页爬到另一个网页来进行网页内容搜集的工具。它的工作通常是这样进行的:在一个网页上,把这个网页的内容收集入数据库,分析这个网页的链接,根据链接进入另一个网页。再进行上面的操作,直到把这个网站的页面全部搜集完,转入下一个网站。
图2 Spider工作流程
BFS算法
Begin
Visit Index
Push clientnode.child into the end of Unvisitedqueue;
If(Unvisitedqueue!=null)
{
Visit the top of Unvisitedqueue;
Clientnode= Unvisitedqueue.top;
Visit Clientnode;
Push clientnode into visitedqueue;
}
End
上述这三个部分都能够实现的话,网络蜘蛛完整工作流程如图2所示。
对于网络蜘蛛的工作流程,如图2所示,网络蜘蛛首先获得一个URL,根据已经处理的URL数据库来判断该URL是否被处理过,如果没有处理过,则解析这个页面,提取这个页面链接页面的URL,然后下载当前页面,同时把当前页面的URL添加到已经处理的数据库中,然后根据选择的遍历算法向Spider提交下一个URL。如果在URL判断中,这个页面已经被处理过,那么直接根据选择的遍历算法向Spider提交下一个URL。为什么要在Spider运行前加一个判断,因为不同的网页可能拥有同一个链接,避免重复处理。
二、各个模块的实现
对于图2所描述的网络蜘蛛来说,实现网络蜘蛛的最重要的三个模块是HTML的解析、页面下载以及网页遍历。对于网页遍历的BFS算法上文中已经描述过了,所以这里重点介绍在C#中如何实现HTML解析和网页下载模块。
1.HTML的解析
对于网络蜘蛛来说,网页信息中最有价值的信息是网页的链接和网页的内容。网页的链接(Internal Links),关系到网络蜘蛛下一步爬行的页面,网页内容则是网络蜘蛛获取的网页所显示的文字或图像内容。
对于网络蜘蛛来说,如何分析、获得网页信息是很重要的一环,在C#中可以用System.Net.WebClient这个方法来获得网页的内容,然后使用URL正则表达式分析Html中的链接。用这种方法来获取网页的链接信息,网页的链接信息是网络蜘蛛进行判断下一步遍历目标,选择遍历路径的重要已知条件。
而另一种方法就是调用.NET的一个类库——HtmlParser这个开源类库可以几乎解析所有的HTML标签。HtmlParser对HTML进行了4级封装,从低级到高级的顺序为:ParserStream、Source、Page、Lexer。其中 ParserStream负责从文件中获取二进制数据,但不做任何处理。Source把二进制文件转换成相应的字符序列,存储一组未加工的字符序列。
2.页面下载模块的实现
图3 简单的网络蜘蛛
在C#中,网页下载是通过HttpWebRequest类来实现的,HttpWebRequest使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持,而其中的GetResponse 方法返回包含来自 Internet 资源的响应的 WebResponse 对象,可以用于页面资源获取。下面则是网页下载中的核心部分,网页的HTML代码的获取。
public string GetPageSource(string url)//获取网页的html代码
{
Uri uri=new Uri(url);
HttpWebRequest MyReq=(HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse MyRes=(HttpWebResponse) MyReq.GetResponse();
MyReq.Method="Post";
MyReq.KeepAlive=false;
StreamReader
reader=new StreamReader(MyRes.GetResponseStream(),System.Text.Encoding.GetEncoding("GB2312"));
return reader.ReadToEnd();
}
图3是笔者根据本文所述实现的一个简易的网络蜘蛛,该网络蜘蛛能对指定的网站进行爬行和页面下载,而此网络蜘蛛下载的页面是保存在指定的路径中,如果要是方便以后进一步建立索引,对页面信息进行处理的话,也可以把网站和页面信息保存在数据库中。
另外一个问题就是网络蜘蛛的爬行周期,太长的话,会影响网络信息的时效性,太短的话,第一技术上实现比较难,第二对网站服务器也增加了不少负担。一般网络蜘蛛的爬行周期设为7~15天之间。并且完成若干个周期之后,网络蜘蛛也不必把已经抓过的网页每次都重新抓取,只需比较网页的属性和上次抓取的有无不同,如果相同也就是没有更新,则不必抓取,如果不同则进行抓取更新。
三、小结
网络蜘蛛是搜集WEB资源信息情报的非常有效的工具。随着互联网资源的日益丰富,网络蜘蛛在情报资源获取方面会起到越来越重要的作用。[4]本文结合C#语言介绍了网络蜘蛛的设计和构建,实现了一种可以实用的网络蜘蛛。在以后的研究中,如何用网络蜘蛛在网页上获取更多和更准确的信息,提供更丰富的检索信息,以及如何提高网络蜘蛛的爬行和抓取效率是我们进一步努力的方向。
参考文献:
[1]宋晖,张岭,叶允明.基于标记树对象抽取技术的Hidden Web获取研究[J].计算机工程与应用,2002(23).
[2]于满泉.基于分块的网页信息解析器的研究与设计[J].计算机应用,2005(4).
[3]赫枫龄.用有向图法解决网页爬行中循环链接问题[J].吉林大学学报,2004(3).
[4]陈先.智能搜索引擎关键技术研究与实现[J].哈尔滨工程大学,2003(2).