用C#2.0实现网络蜘蛛(WebSpider)

本文为原创,如需转载,请注明作者和出处,谢谢!

本文曾获得首届.Net平台创新编程征文比赛三等奖

http://www.comprg.com.cn/net/n0302.htm



    摘要:本文讨论了如何使用C#2.0实现抓取网络资源的网络蜘蛛。使用这个程序,可以通过一个入口网址(如http: //www.comprg.com.cn)来扫描整个互联网的网址,并将这些扫描到的网址所指向的网络资源下载到本地。然后可以利用其他的分析工具对这些 网络资源做进一步地分析,如提取关键词、分类索引等。也可以将这些网络资源作为数据源来实现象Google一样的搜索引擎。
关键词:C#2.0,Html,网络蜘蛛, 键树,正则表达式

一、引言

    在最近几年,以Google为首的搜索引擎越来越引起人们的关注。由于在Google出现之前,很多提供搜索服务的公司都是使用人工从网络上搜集信息,并将这些信息分类汇总后作为搜索引擎的数据源。如yahoo公司一开始就是通过数千人不停地从网上搜集供查询的信息。这样做虽然信息的分类会很人性化,也比较准确,但是随着互联网信息爆炸式地增长,通过人工的方式来搜集信息已经不可能满足网民对信息的需求了。然而,这一切随着Google的出现而得到了彻底改变。Google一反常规的做法,通过程序7*24地从网上不停地获取网络资源,然后通过一些智能算法分析这些被下载到本地的网络资源,最后将这些分析后的数据进行索引后就形成了一套完整的基本上不需要人工干预的搜索引擎。使用这种模式的搜索引擎甚至可以在几天之内就可获取Internet中的所有信息,同时也节省了大量的资金和时间成本。而这种搜索引擎最重要的组成部分之一就是为搜索引擎提供数据源的网络蜘蛛。也就是说,实现网络蜘蛛是实现搜索引擎的第一步,也是最重要的一步。

二、网络蜘蛛的基本实现思想和实现步骤


    网络蜘蛛的主要作用是从Internet上不停地下载网络资源。它的基本实现思想就是通过一个或多个入口网址来获取更多的URL,然后通过对这些URL所指向的网络资源下载并分析后,再获得这些网络资源中包含的URL,以此类推,直到再没有可下的URL为止。下面是用程序实现网络蜘蛛的具体步骤。

    1. 指定一个(或多个)入口网址(如http://www.comprg.com.cn),并将这个网址加入到下载队列中(这时下载队列中只有一个或多个入口网址)。
    2. 负责下载网络资源的线程从下载队列中取得一个或多个URL,并将这些URL所指向的网络资源下载到本地(在下载之前,一般应该判断一下这个URL是否已经被下载过,如果被下载过,则忽略这个URL)。如果下载队列中没有URL,并且所有的下载线程都处于休眠状态,说明已经下载完了由入口网址所引出的所有网络资源。这时网络蜘蛛会提示下载完成,并停止下载。
    3. 分析这些下载到本地的未分析过的网络资源(一般为html代码),并获得其中的URL(如标签<a>中href属性的值)。
    4. 将第3步获得的URL加入到下载队列中。并重新执行第2步。

关于文章后面的内容,请读者访问http://www.comprg.com.cn/net/n0302.htm

posted on 2008-05-12 13:20 银河使者 阅读(2629) 评论(22)  编辑 收藏 所属分类: algorithmC# 原创

评论

#1楼  2008-05-12 13:51 Collins [未注册用户]

微软现在的搜索真烂   回复  引用  查看    

#2楼  2008-05-12 13:55 loworth      

也看了其他二等奖和三等奖的作品
觉得你这篇文章跟那些放一起有些屈才了。 这个征文比赛组委会不知道咋搞的!   回复  引用  查看    

#3楼 [楼主] 2008-05-12 14:07 银河使者      

主要是宣传微软的新技术,估计要是用新的技术,如WCF,做一个spider,估计起码能得二等奖。   回复  引用  查看    

#4楼  2008-05-12 14:15 大林 [未注册用户]

还不错,我的实现方式基本和你一样   回复  引用  查看    

#5楼  2008-05-12 14:29 HedgeHog      

好东西,学习了   回复  引用  查看    

#6楼  2008-05-12 14:47 广州地震了吗? [未注册用户]

广州地震了吗?
不知道大家感觉到没有,地在摇,   回复  引用  查看    

#7楼  2008-05-12 14:57 幻影007      

呵呵,我一直也想写一个类似的程序,可惜有点懒。
  回复  引用  查看    

#8楼 [楼主] 2008-05-12 15:00 银河使者      

广州好象没地震,只是某人的心在跳。哈哈!!!   回复  引用  查看    

#9楼  2008-05-12 15:06 mycolin [未注册用户]

现在 java 社区中有很多开源程序可供参考,但是 .net 好像还没有,不知道谁知道不?   回复  引用  查看    

#10楼  2008-05-12 15:30 鬼不灵      

我晕,这个也能获奖???
唉~,现在的所谓创新……   回复  引用  查看    

#11楼  2008-05-12 15:55 无语~ [未注册用户]

无语~ 简直..........   回复  引用  查看    

#12楼  2008-05-12 15:56 呵呵呵呵 [未注册用户]

那个找<a 简直是外行 学校怎么教的   回复  引用  查看    

#13楼  2008-05-12 15:57 chzhcpu      

网上到处都是开源的蜘蛛。一抓一把,大的小的,都有!   回复  引用  查看    

#14楼  2008-05-12 16:30 Tony Qu      

微软现在搞的比赛参加的人本来就不多,貌似参加就能拿奖,呵呵,不过楼主的作品还是不错的!   回复  引用  查看    

#15楼  2008-05-12 16:53 4x4y.com [未注册用户]

老大能不能把项目源码打个包给下载   回复  引用  查看    

#16楼 [楼主] 2008-05-12 19:51 银河使者      

这篇文章已经在《电脑编程技巧与维护》2008年第4期发表了。在www.comprg.com.cn有程序源代码,大家可以去下载。   回复  引用  查看    

#17楼  2008-05-12 21:33 Scott Xu(南方小鬼)      

第四期的源码还没有出来呢,可否先发一份给我哦,rgxs@qq.com   回复  引用  查看    

#18楼  2008-05-12 22:02 镜涛      

想写个图片下载。这个东东需要好好分析一下   回复  引用  查看    

#19楼  2008-05-12 22:59 网上闲逛 [未注册用户]

好像和我平时写的采集没什么两位啊?有点奇怪为什么不用数据库和正则,这些不都是现成的,高效率的方法,这样简单一点不就三四十行就搞定了?   回复  引用  查看    

#20楼  2008-05-13 02:15 簡簡單單..      

向LZ学习..   回复  引用  查看    

#21楼  2008-05-13 09:00 4x4y.com [未注册用户]

老大要源码啊,能否上传一份源码,主要是中间一些算法的应用很赞,想看看具体抓取的时候有没有使用异步,做过类似的东西,其中一个问题就是多线程,异步问题   回复  引用  查看    

#22楼  2008-05-27 18:01 blueyund      

老大啊第四期的源码还没有出来呢,可否先发一份给我哦,blueyund#163.com

要不你快上传份源码吧   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-22 17:08 编辑过
 
另存  打印
最新IT新闻:
· 李开复:中文搜索是谷歌战略核心
· 《星际争霸2》新图:黑暗圣堂武士Zeratul
· FriendFeed介绍
· 微软在台北发布新色鼠标产品
· Hitwise:雅虎流量来自Google搜索比来自雅虎搜索的还多
 


<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

与我联系

常用链接

留言簿(3)

我参与的团队

我的标签

随笔分类(91)

随笔档案(47)

相册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

60天内阅读排行