Coder On Rails

致力于爬虫的学习

导航

spider(三) 我们是一只礼貌的爬虫

  互联网的信息是共享的,任何人在一定的权限范围下都可以主动的去获取互联网上的资源。不过网络上的资源都存在着多多少少的限制,比如说服务器资源有限,网络资源有限,所以在我们获取资源的同时尽量的不过多的占用资源,从而导致别人无法正常获取。爬虫也是一样,爬虫可以方便快捷的获取网络资源,但是不能因为如此,我们就滥用爬虫获取资源,我们需要遵循一定的规则,这样才能和资源提供方更友好的合作。

  那么这些规则该有那些呢?别急,下面就给你慢慢道来:

  (一)进门原则:我们去拜访某位朋友,出于礼貌我们需要得到主人的许可我们才可以进入主人的房间,进入主人的房间后,我们绝对不能乱翻主人的东西(当然排除主人和你的关系不一般),我们要看主人的某样东西当然也要获得主人的许可,在此基础上我们可以尽情的参观主人的房间了。好吧,不知道你明白我前面的话啥意思,爬虫需要去爬取指定站点的时候,也可以理解成我们要去拜访某个站点,拜访前我们要确认这个站点是否允许我们爬取,或者说对我们的爬取有啥限制,这里有个规则,叫做罗伯特协议(robots),这规定了任何访问该站点的爬虫可以访问该站点的何种资源,具体的罗伯特协议大家可以参考相关资料,我们来看一个淘宝的案例,打开http://www.taobao.com/robots.txt站点,我们可以看到如下内容:

 

User-agent: Baiduspider
Disallow:
/

User
-agent: baiduspider
Disallow:
/

  应该很容易看明白,这里告诉爬虫,如果你是百度的爬虫,那么请你离开这里,淘宝很不欢迎你的到来,你不允许爬取我任何的资料。当然有人会问,这个是强制的么?当然不是,如果百度无赖一点可以继续爬取,不过出于礼貌百度对乖乖的离开这里。

 


  (二)访问频率:先说个以前干过的傻事吧,访问一个站点的资源,开启了10条线程同时不间断的抓取,不到半个小时,发现目标站点的服务器瘫痪了。别小瞧这10个线程,我们来做个算术,tomcat默认可以有200个线程去处理连接,如果使用HTTP1.1协议的话,每次访问保持原有的长连接,很快我们就可以将200个占满,再过一段时间,等待任务队列会变的很长,直接导致对方服务器访问受限。这里有个不成文的规定,就是假设爬虫每次请求的时间为t,那么建议你最好休息10t的时间以后再去访问该站点的资源,这样对目标服务器的压力会降到最低,或者说基本没有什么压力上的影响。这和我们访问主人家里一样,你天天往朋友的家里去做客,时间长了,再有耐心的朋友我想也会心有点不舒服的。所以我们需要变得礼貌一些,这样对我们的交际会更好。

  (三)访问压力:这里的压力和上面的频率还有点不同,还是以访问朋友的例子来说,我一个人去访问,和带一帮人去访问朋友,朋友的心态肯定不一样。我们访问网站也是,理论上爬取一个站点的资源最好只使用一条线程按照平衡礼貌规则(上面所说的)去访问,多条线程同时访问,也会给对方带来意想不到的压力。

  好了,就简单的描述这么一点,有什么补充的大家可以继续拍砖。

posted on 2010-10-21 16:02  CoderOnRails  阅读(721)  评论(1编辑  收藏  举报