搜索引擎, 请手下留情

     今天凌晨1点左右, 在进行一个晚上的性能优化后,准备睡觉时, 我突然想:这么晚了,看还有哪些忠实的用户在访问博客园?打开性能监视器,Current Connections竟然有200-300, 高的时候会达到400左右,这么晚了还有这么多用户,我有点怀疑,是不是有什么软件不停地在爬网站的数据, 而且Current Connections一直在200以上,有必要记录一下这些访问来自何方?
     连续一个多星期的奋战已经让我很累,真想早点睡觉,明天再说。可是如果明天白天进行处理,会对网站的运行带来更大的影响,而且网站的性能问题一定要尽快解决,不能再拖下去了。这时,我心里已经在猜测搜索引擎可能是很大的嫌疑对象。
     于是,我打起精神,写了点代码,记录所有访问博客园的客户端IP地址及UserAgent。在记录的过程中,我就发现果然有搜索引擎在不停地访问博客园,进行了半小时的记录后,我对记录数据进行了分析,大家先看看数据:
     测试时间:1:05-1:35
     最大访问来自(UserAgent):sohu agent
     访问次数:8439
     平均每分钟访问次数:287

     好狠的搜索引擎!在肆无忌惮地爬博客园的数据,难怪这么晚还有那么多链接。如果它整天都在这样爬博客园的数据, 那对网站的性能会带来很大的影响,它也许是博客园最近性能问题的凶手之一。没办法,为了网站性能,只能对这样的搜索引擎说“不”,我立即修改代码,拒绝了这个爬虫(sohu agent)! 效果要到早上上班才能看出来。
      今天早上,为了防止还有其他疯狂的爬虫,我又对网站访问进行了记录,对记录数据进行分析后又发现了一个疯狂的爬虫:

     测试时间:7:19-7:30
     最大访问来自(UserAgent): Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)         
     访问次数:2906
     平均每分钟访问次数:264

     继续对它说“不”,拒绝它对博客园的访问。
     你可能要问:Google是 爬虫的情况怎么样?在记录数据中,Google排名第二,但访问次数不多,只有459, 少好几倍。
     虽然这样的分析数据不全面,但对于搜索引擎来说,这样疯狂爬一个网站的数据是不妥的。当它在疯狂地吸取一个网站的数据时,是否考虑会给对方造成影响。Google网站上有这样的说明:“对大多数网站来说,Googlebot 的平均访问频率不会高于数秒钟一次。” 看来Google还是考虑到这个问题了。而发现的这两个疯狂的爬虫,竟然达到了4次/秒。如果它们不停地这样访问一个网站,一般网站的性能会很受影响。看来,博客园最近的性能问题的罪魁祸首可能就是它们了。
     拒绝了这两个爬虫(sohu agent与Yahoo! Slurp) 对博客园的访问后,从早上到现在的网站运行情况看,网站性能有了明显的提高,CPU占用明显降下来,平均只有50%, 前几天,CPU占用率几乎就是一条直线。
     现在,垃圾广告、垃圾邮件是互联网很头疼的问题,也许以后“垃圾爬虫”也会加入它们的行列。  
     博客园的性能问题是否能真正解决,还要看今天一天网站的运行情况,希望今天晚上能睡个好觉。 

posted @ 2005-10-27 10:33 dudu 阅读(4490) 评论(83) 编辑 收藏

 回复 引用   
#1楼 2005-10-27 10:46 郑彬[未注册用户]
通过防火墙、iis、还是asp.net程序里面进行的?
 回复 引用 查看   
#2楼 2005-10-27 10:47 深渊野鱼      
dudu辛苦了:)
cnblogs已经成为我们的精神家园,一定要保护我们的家园。:)

 回复 引用 查看   
#3楼[楼主] 2005-10-27 10:51 dudu      
@郑彬
在程序中进行的。
@深渊野鱼
我一定会好好地保护!

 回复 引用 查看   
#4楼 2005-10-27 10:53 idior      
估计这个是目前的主要影响之一。
 回复 引用 查看   
#5楼 2005-10-27 10:55 马维峰      
这个爬虫这么厉害,没有想到。
 回复 引用 查看   
#6楼 2005-10-27 11:02 被遗弃的小指      
有一个建议,在目前的很多论坛里面有一种机制,就是不允许某一个连接在很短的时间内反复打开本论坛中的页面,哪怕是不同的页面也不允许,这种方式基本上可以限制一些搜索引擎的爬虫。
不过这种做法也有弊端,因为得要维护一个当前的连接的列表(session,时间,访问的页面等等),这也是一个负担。。。。。
dudu看看能否参照这个思路来控制一下?

 回复 引用   
#7楼 2005-10-27 11:13 biduan[未注册用户]
google的爬虫一般不只一个

我曾经再一个站点记录每天的访问量,发现google抓取页面的爬虫(不同IP数目)最多,MS,Baidu也有
不过那个网站访问量没有博客圆那么大,影响不是很明显

 回复 引用 查看   
#8楼[楼主] 2005-10-27 11:24 dudu      
@被遗弃的小指
谢谢你的建议!

 回复 引用 查看   
#9楼 2005-10-27 11:27 Duiker      
我申请了一个站点技术器,可以分析每天访问我的站点的链接,大多数都是BaiDu和Google的,这个分析是分析duiker.cnblogs.com,我自己二级域名的,所以我认为根本原因就在这个二级域名上.

因为每个用户都有自己的二级域名,而且很多都在Google或者BaiDu上进行了注册,以提高自己Blog的知名度,因此,Google等爬虫不仅要爬主域名,而且还要爬目前10000多个二级域名,这样目前服务器的负载就可想而知了,因此,目前拒绝访问不是好的办法,而是如果避免google爬二级域名才是正道,其实目前的情况我想Google也是不想的,二级域名还是少爬最好,所以我想这才是根本原因呀。

 回复 引用 查看   
#10楼[楼主] 2005-10-27 11:29 dudu      
今天上午记录了博客园的访问情况(不包含两个拒绝的爬虫,UserAgent不为空):
时间段: 2005-10-27 7:19:48 ~ 2005-10-27 10:37:05
访问次数: 333179

 回复 引用 查看   
#11楼 2005-10-27 11:31 老翅寒暑      
我觉得是一个双刃剑,拒绝搜索引擎固然会提高速度,但是妨碍了大家使用高品质的查询服务。dudu可以折中一下,考虑限制而不是拒绝搜索爬虫。

1。通过分析得到访问的高峰时间,高峰时间可以限制搜索爬虫的访问速率,比如1次每秒,在访问低峰时间可以考虑完全放开爬虫的访问。通过相关加权算法来进行判断。
2。对于google,baidu,yahoo等用户量大的,可以限制,除此之外的可以考虑拒绝,或者权值更低。
3。拒绝信息的处理,不要返回404页面不存在这种类型的错误,返回的错误类型应该是“页面忙,请稍候访问”,这样搜索爬虫应该会有相应的处理机制的。

 回复 引用 查看   
#12楼[楼主] 2005-10-27 11:33 dudu      
@Duiker
没有拒绝Google啊! 从目前看, Google的爬网没给性能带来多大的影响。
从Google网站说明上看,Google爬网时会注意不在很短的时间内进行大量的访问。

 回复 引用 查看   
#13楼 2005-10-27 11:34 ccBoy      
几年前大家都想自己的网站被Google,Baidu访问和做到索引中,现在有了明显的变化:)


 回复 引用   
#14楼 2005-10-27 11:38 lovebanyi[未注册用户]
Dudu 用这个了吗
robots 添加这个就行了.这样比较方便

 回复 引用 查看   
#15楼 2005-10-27 11:40 乖狗狗      
强烈支持dudu
跟着dudu真的学到了很多东西

 回复 引用 查看   
#16楼[楼主] 2005-10-27 11:43 dudu      
@老翅寒暑
谢谢你的建议。
拒绝搜索爬虫是采取的临时解决方法。
可以只在访问的高峰期拒绝搜索爬虫。
目前拒绝时,只是终止请求, 返回的是空页面, 应该返回“页面忙,请稍候访问”比较好, 但不知这个错误的代码是什么?
要是robots.txt能自定义爬虫的访问频繁就好了。
希望大家提更多的建议, 找到真正解决爬虫问题的方法。

 回复 引用   
#17楼 2005-10-27 11:47 faqi[未注册用户]
物极必反,也不知google、baidu等是否考虑过,如果大家都拒绝了他们,他们还有存在的意义吗
 回复 引用 查看   
#18楼[楼主] 2005-10-27 11:47 dudu      
@lovebanyi
如果在robots.txt中定义, 会拒绝几乎所有的搜索引擎。
现在只是要描绘不规距的爬虫。

 回复 引用   
#19楼 2005-10-27 11:51 多等[未注册用户]
毕竟dudu是私人架设得服务器...

若是企业,公司,一般是整套上线的...

硬件防火墙,vlan配置,服务器群集...等等.

想提升分析,程序仅仅是一方面

 回复 引用   
#20楼 2005-10-27 11:56 gyf19[未注册用户]
dudu辛苦了:)
真是人怕出名,猪怕壮,网站也是一样。

 回复 引用 查看   
#21楼 2005-10-27 12:00 pcvc      
难怪早上速度这么快,高兴!
 回复 引用 查看   
#22楼 2005-10-27 12:07 wssmax      
现在该是我们出手的时候了.
大家都想想办法.多提意见啊.

 回复 引用 查看   
#23楼 2005-10-27 13:07 乖狗狗      
现在Blog的速度非常快,感谢dudu
 回复 引用 查看   
#24楼 2005-10-27 13:20 横渡      
拒绝搜索引擎的搜索不就得了。
大家要搜就到BLOG里搜(自己做个)。^o^反正又不以访问量和广告代理来赚钱的!

 回复 引用 查看   
#25楼 2005-10-27 13:37 oop80      
今天非常非常的正常,看来是搜索引擎的问题了。
 回复 引用 查看   
#26楼 2005-10-27 13:37 wddavid      
dudu

小弟报告一下,现在比较长的评论不能浏览了,点击“浏览全文”也无法看到……

 回复 引用 查看   
#27楼[楼主] 2005-10-27 13:43 dudu      
@wddavid
哪篇文章?

 回复 引用 查看   
#28楼 2005-10-27 13:48 Tony Qu      
可以考虑些一个Robot协议文件,放在网站根目录下,据说搜索引擎都遵守该协议
 回复 引用   
#29楼 2005-10-27 13:50 想学[未注册用户]
DUDU是通过程序的方式来拒绝网络爬虫的吧?
我想请教一下你是怎么样来拒绝的????写一两句代码看看好吗??嘻`~~

 回复 引用 查看   
#30楼 2005-10-27 13:53 疾风      
dudu真是辛苦啦,谢谢
 回复 引用 查看   
#31楼[楼主] 2005-10-27 13:59 dudu      
@想学
在Global.cs中
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if(是拒绝的爬虫)
{
Context.ApplicationInstance.CompleteRequest();
}
}

 回复 引用 查看   
#32楼[楼主] 2005-10-27 14:01 dudu      
@Tony Qu
robots文件对所有搜索引擎有效, 我只想拒绝会带来性能问题的搜索引擎。

在Global.cs中
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if(request == robot协议)
{
if(不是需拒绝的爬虫)
{
Context.ApplicationInstance.CompleteRequest();
}
else
{
传送
}
}
}

 回复 引用 查看   
#34楼 2005-10-27 14:21 垃圾猪      
说不定真的是因为二级域名的原因,不过不管怎么样比CSDN的稳定多了
 回复 引用   
#35楼 2005-10-27 14:38 DingBing[未注册用户]
robots文件中可以指定不允许特定的User-agent检索的
 回复 引用 查看   
#36楼 2005-10-27 14:51 宇文拓      
哈,dudu辛苦了,没想到还有这些影响性能的因素
 回复 引用 查看   
#37楼[楼主] 2005-10-27 14:59 dudu      
@DingBing
嗯, 可以的, 刚才从博客园的一篇文章中看到的: http://www.cnblogs.com/babyblue/archive/2004/03/07/2399.aspx

我担心有些爬虫不理会robot文件。
采用程序控制更灵活, 我可以在某段时间拒绝, 某段时间允许。

 回复 引用 查看   
#38楼[楼主] 2005-10-27 15:12 dudu      
@不知道这样行不行
"request == robot协议",这样怎么比较?

@垃圾猪
如果是二级域名的问题, 那么Google与百度在爬网时怎么没引起这个问题呢?

 回复 引用   
#39楼 2005-10-27 15:31 KKKKK[未注册用户]
dudu 辛苦了!!

dudu,能不能请教一下用什么工具可以监视到爬虫??

 回复 引用 查看   
#40楼[楼主] 2005-10-27 15:41 dudu      
@KKKKK
“写了点代码,记录所有访问博客园的客户端IP地址及UserAgent”。

 回复 引用   
#41楼 2005-10-27 16:04 KKKKK[未注册用户]
谢谢dudu
 回复 引用 查看   
#42楼[楼主] 2005-10-27 16:08 dudu      
看着性能监视器中CPU漂亮的曲线, 好开心!
那恼人的直线曾经困扰了我一个多星期,为它愁眉苦脸、为它废寝忘食,现在终于战胜了它, 感觉浑身的轻松。

 回复 引用 查看   
#43楼 2005-10-27 16:19 wddavid      
@dudu老大

这个:
http://wddavid.cnblogs.com/archive/2005/10/25/257047.html

我写的每一章的心得,现在都看不到了啊,55555

 回复 引用   
#44楼 2005-10-27 16:20 小M[未注册用户]
哈...DUDU好棒...
 回复 引用 查看   
#45楼 2005-10-27 16:21 pcvc      
你开心我们也高兴呀^_^
 回复 引用 查看   
#46楼[楼主] 2005-10-27 16:28 dudu      
@wddavid
该问题会在晚上更新程序之后解决。

 回复 引用   
#47楼 2005-10-27 16:31 122[未注册用户]
老大,没有了google你让我怎么活?
我自己搜索资料都是用google的站内搜索的功能
你禁用了它,咋找cnblogs里面的资料?
还往三思呀!!!!


 回复 引用 查看   
#48楼[楼主] 2005-10-27 16:45 dudu      
@122
晕!我没拒绝google啊!

 回复 引用   
#49楼 2005-10-27 17:28 七匹狼111[未注册用户]
dudu 你好,

你那个拒绝爬虫的代码是怎么写的,能贴出来么?谢谢!

robot文件搜索引擎一般都会处理的。但爬得这么狠,会不会是有人采集而冒充爬虫?
 回复 引用 查看   
#51楼[楼主] 2005-10-27 20:26 dudu      
@wddavid
你所发现的问题已经解决。
@七匹狼111
评论中有。
@Web Hosting Review
有这个可能,所以至少在访问高峰期拒绝它。

 回复 引用   
#52楼 2005-10-27 21:58 hunanlion[未注册用户]
谢谢dudu 前两天我都有点郁闷 觉得人太多 打开页面也慢 现在好多拉
谢谢拉
真的应该保证广大网民的利益 真的我觉得他们太过分拉

 回复 引用 查看   
#53楼 2005-10-27 22:08 wddavid      
dudu, thanks, 偶爱你
 
但是好像还有个一直都存在的问题啊,就是在评论中 插入代码 常常会没有那种代码格式出来。比如在这个帖子里回复用高级评论插入代码就和输入一样,不成……
dudu不好意思,一直提问题,不过一直困扰很久了……

 回复 引用 查看   
#54楼 2005-10-27 22:12 猪头      
拒绝不是办法吧?如果你拒绝了,那么就无法在google/baidu里搜索cnblogs里的好文章了!!!!
想点别的办法~~~~~~~辛苦了~~~~~~~~

 回复 引用 查看   
#55楼 2005-10-27 22:15 猪头      
现在通过google/baidu可以找到好多BLOGS的文章,如果拒绝了,那怎么办????

http://www.google.com/search?q=RequiredFieldValidator%20&hl=zh-CN&lr=&oe=GB2312&newwindow=1&domains=cnblogs.com&sitesearch=cnblogs.com&start=10&sa=N

 回复 引用   
#56楼 2005-10-27 23:10 REvol[未注册用户]
原来如此!真是恍然大悟啊。
有点牛顿被苹果砸到的刹那感觉。呵呵。

 回复 引用 查看   
#57楼 2005-10-28 08:31 难得一蠢      
http://www.6mj.com/net/2004-2/2004221214913.htm 看看这个文章..介绍的比较详细..

用Robots META标签限制某些页面的提取也是解决问题的一个办法..爬虫是按照链接一步一步爬下去的..我们可以在链接的页面中加入Robots Meta标签..在第二个页面拦截下来..

另外可以根据当前的系统时间,写入这些Robots Meta标签..以上是我的想法..没有测试过,不知道行不行..

 回复 引用   
#58楼 2005-10-28 08:33 god[未注册用户]
我们再想办法,不过不管是baidu还是google是不能够拒绝的,现在cnblogs访问量大,几乎没分钟都有新的文章,谁都不可能一直关注cnblogs发表什么新文章
如果禁用baidu/google,就没有办法查找新的文章
或者,我们自己做一个cnblogs站内搜索引擎

 回复 引用 查看   
#59楼 2005-10-28 08:43 jackei      
dudu辛苦了,我们支持你!
 回复 引用 查看   
#60楼 2005-10-28 09:06 T_98Dsky       
@猪头
@god
晕呀!dudu都说了不是拒绝 baidu和google了!

 回复 引用 查看   
#61楼[楼主] 2005-10-28 09:10 dudu      
@猪头
@god
我真的很晕!文章中不是清楚地写着: “拒绝了这两个爬虫(sohu agent与Yahoo! Slurp) ”, 而且这两个爬虫只是在访问高峰期拒绝。

 回复 引用 查看   
#62楼 2005-10-28 09:10 gloser      
如果拒绝搜索引擎,很多cnblogs个人博客的访问量就会少很多,
 回复 引用   
#63楼 2005-10-28 09:50 fffly[未注册用户]
我想问问:
搜索引擎爬数据,应该是爬更新的数据吧,总不会定期把整个网站都爬一遍吧?

 回复 引用   
#64楼 2005-10-28 09:59 小峰[未注册用户]
robots.txt是可以针对每个搜索引擎定制规则的,至于搜索引擎是否遵守就不知道了,好象baidu就不遵守,

我们公司网站来源最大的bot是baidu,

 回复 引用 查看   
#65楼[楼主] 2005-10-28 21:09 dudu      
@wddavid
在高级评论中插入代码的问题, 我会尽快解决。

 回复 引用 查看   
#66楼 2005-10-29 04:38 卡卡.net      
呵呵,我都是晚上来园子里,白天根本打不开呀
拒绝搜索引擎也不是长久之计策,咱们的园子越来越壮大了,dudu可以学习一下大型网络的经验,看看他们是如果处理这些问题的。

 回复 引用   
#67楼 2005-10-29 19:25 活靶子[未注册用户]
robots.txt中也可以按照爬虫的名字来禁止
其实博客园留下google和baidu的爬虫 就可以了
还有可以制作googleSiteMap 让 google 来订阅博客园
那么它只爬新的内容

 回复 引用 查看   
#68楼[楼主] 2005-10-29 19:29 dudu      
@活靶子
谢谢你的建议!

 回复 引用   
#69楼 2005-10-31 20:23 小峰[未注册用户]
PingBack:垃圾邮件就是这么产生的
垃圾邮件地址收集器,搜索引擎的数据抓取,可能给服务器带来很大的压力,
http://blog.codelphi.com/ayeel/archive/2005/10/31/90382.aspx

 回复 引用 查看   
#70楼 2005-11-09 11:32 Dragonpro      
谢谢Dudu

现在网络正常得很,辛苦了~~

 回复 引用 查看   
#71楼 2005-11-11 14:00 寒带鱼      
dudu辛苦
 回复 引用   
#72楼 2005-11-14 05:18 小猪娇[未注册用户]
博客不会被他们打倒的
 回复 引用   
#73楼 2005-12-03 19:54 小小[未注册用户]
很多爬虫的效率很低,我都不知道他们到底是干什么的,他们爬了半天对我的站 一点帮助都没有
 回复 引用   
#74楼 2005-12-26 00:30 xili[未注册用户]
dudu:

robot有专门的协议吗?

(request == robot协议 ) 具体含义是什么?

 回复 引用 查看   
#75楼[楼主] 2005-12-26 09:09 dudu      
@xili
请去搜索相关资料。

 回复 引用 查看   
#76楼 2006-03-21 08:58 zkxp      
举得半夜三更的爬好像不因该有影响的吧。
 回复 引用   
#77楼 2006-06-08 23:50 随意[未注册用户]
to:xili 我想应该是

if Request.ServerVariables("HTTP_USER_AGENT").tolower.indexof("googlebot")>-1 then
'它是google
end if

 回复 引用 查看   
#78楼 2006-08-07 16:24 阿星      
原来爬虫是这个东西啊,这还真是个问题啊
 回复 引用 查看   
#79楼 2008-01-30 14:32 ytzong      
做个站内搜索吧,GOOGLE的不能排序啊
 回复 引用 查看   
#80楼 2009-08-05 17:21 大道无情      
@被遗弃的小指
你的想法一点不现实,很傻很天真 HTTP是无状态的协议,你无法区分是不是同一个机器在访问你,唯一能做为判断条件的就是IP地址,但是搜索引擎有的是抓取阵列机器,万百上千万抓取阵列,每台机器访问你一次就是几千次,达到目的了,所以没办法防范,友善的爬虫会表明身份,如果多次有意意被拒绝后遇到强硬的爬虫,模拟浏览的HTTP请求你是没法分辨的.
不要说SESSION 维持SESSION COOKIES需要客户端配合,访问都可以故意丢弃你的SESSION_ID 和COOKIES 每次访问都以新请求身份出现,看你怎么防

 回复 引用 查看   
#81楼 2011-05-04 19:31 许崇雷      
青岛联通网络为什么访问不了博客园啊..
 回复 引用 查看   
#82楼[楼主] 2011-05-04 21:45 dudu      
@许崇雷
访问时出现什么提示?

 回复 引用 查看   
#83楼 2011-05-24 09:10 许崇雷      
@dudu
404