如何避免搜索引擎爬虫产生的流量过大以及搜索引擎设置优化

转载自:http://www.qiexing.com/post/web-seach-spider.html

 

今天却收到了虚拟主机商的报告:说当月流量已经超出15G!

登录到后台的统计才发现,正常的网站浏览产生的流量才1G多,而搜索引擎爬虫(也称蜘蛛:spider等)产生的流量却达14G之多!有图为证:

为什么会搜索引擎爬虫会产生这么大的流量,特别是搜狗的爬虫与bspider爬虫真是大的惊人,但却不能为网站带来流量。从统计中看到网站的大多数流量是来自百度与谷歌两个搜索引擎,因此决定修改robots.txt文件,屏蔽其它搜索引擎爬虫。

从网上查看到的方法与格式,不知道正确与否,帖出来给大家看看,如有错误请指正:

User-agent: Googlebot
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /sites/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /contact/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/

User-agent: baiduspider
# Directories
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
Disallow: /profiles/
Disallow: /scripts/
Disallow: /sites/
Disallow: /themes/
# Files
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /INSTALL.mysql.txt
Disallow: /INSTALL.pgsql.txt
Disallow: /install.php
Disallow: /INSTALL.txt
Disallow: /LICENSE.txt
Disallow: /MAINTAINERS.txt
Disallow: /update.php
Disallow: /UPGRADE.txt
Disallow: /xmlrpc.php
# Paths (clean URLs)
Disallow: /admin/
Disallow: /comment/reply/
Disallow: /contact/
Disallow: /logout/
Disallow: /node/add/
Disallow: /search/
Disallow: /user/register/
Disallow: /user/password/
Disallow: /user/login/
# Paths (no clean URLs)
Disallow: /?q=admin/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/
User-agent: *
Disallow: /

这里主要通过Disallow,限制访问一些无关管理页面与文件,另外通过User-agent * 屏蔽了除了百度与谷歌的所有搜索引擎爬虫。关于robots.txt具体使用,请搜索robots.txt教程

 

另外关于搜索引擎的爬虫知识,在网上看到一篇很好的介绍文章,转载在这里:http://robbin.javaeye.com/blog/451014

因为搜索引擎的流行,网络爬虫已经成了很普及网络技术,除了专门做搜索的Google,Yahoo,微软,百度以外,几乎每个大型门户网站都有自己的搜索 引擎,大大小小叫得出来名字得就几十种,还有各种不知名的几千几万种,对于一个内容型驱动的网站来说,受到网络爬虫的光顾是不可避免的。 

一些智能的搜索引擎爬虫的爬取频率比较合理,对网站资源消耗比较少,但是很多糟糕的网络爬虫,对网页爬取能力很差,经常并发几十上百个请求循环重 复抓取,这种爬虫对中小型网站往往是毁灭性打击,特别是一些缺乏爬虫编写经验的程序员写出来的爬虫破坏力极强。曾经有一次我在JavaEye的日志里面发现一个User- Agent是Java的爬虫一天之内爬取了将近100万次动态请求。这是一个用JDK标准类库编写的简单爬取网页程序,由于JavaEye网站内部链接构 成了回环导致程序陷入了死循环。对于JavaEye这种百万PV级别的网站来说,这种爬虫造成的访问压力会非常大,会导致网站访问速度缓慢,甚至无法访 问。 

此外,相当数量的的网页爬虫目的是盗取目标网站的内容。比方说JavaEye网站就曾经被两个竞争对手网站爬取论坛帖子,然后在自己的论坛里面用 机器人发帖,因此这种爬虫不仅仅影响网站访问速度,而且侵犯了网站的版权。 

对于一个原创内容丰富,URL结构合理易于爬取的网站来说,简直就是各种爬虫的盘中大餐,很多网站的访问流量构成当中,爬虫带来的流量要远远超过 真实用户访问流量,甚至爬虫流量要高出真实流量一个数量级。像JavaEye网站虽然设置了相当严格的反爬虫策略,但是网站处理的动态请求数量仍然是真实 用户访问流量的2倍。可以肯定的说,当今互联网的网络流量至少有2/3的流量爬虫带来的。因此反爬虫是一个值得网站长期探索和解决的问题。 

一、手工识别和拒绝爬虫的访问 

有相当多的爬虫对网站会造成非常高的负载,因此识别爬虫的来源IP是很容易的事情。最简单的办法就是用netstat检查80端口的连接:

C代码 

  1. netstat -nt | grep youhostip:80 | awk '{print $5}' | awk -F":" '{print $1}'| sort | uniq -c | sort -r -n   

这行shell可以按照80端口连接数量对来源IP进行排序,这样可以直观的判断出来网页爬虫。一般来说爬虫的并发连接非常高。 

如果使用lighttpd做Web Server,那么就更简单了。lighttpd的mod_status提供了非常直观的并发连接的信息,包括每个连接的来源IP,访问的URL,连接状 态和连接时间等信息,只要检查那些处于handle-request状态的高并发IP就可以很快确定爬虫的来源IP了。 

拒绝爬虫请求既可以通过内核防火墙来拒绝,也可以在web server拒绝,比方说用iptables拒绝: 
C代码 

  1. iptables -A INPUT -i eth0 -j DROP -p tcp –dport 80 -s 84.80.46.0/24    

直接封锁爬虫所在的C网段地址。这是因为一般爬虫都是运行在托管机房里面,可能在一个C段里面的多台服务器上面都有爬虫,而这个C段不可能是用户 宽带上网,封锁C段可以很大程度上解决问题。 

有些人提出一种脑残的观点,说我要惩罚这些爬虫。我专门在网页里面设计动态循环链接页面,让爬虫掉进陷阱,死循环爬不出来,其实根本用不着设置陷 阱,弱智爬虫对正常网页自己就爬不出来,这样做多此一举不说,而且会让真正的搜索引擎降低你的网页排名。而且运行一个爬虫根本不消耗什么机器资源,相反, 真正宝贵的是你的服务器CPU资源和服务器带宽,简单的拒绝掉爬虫的请求是反爬虫最有效的策略。 

二、通过识别爬虫的User-Agent信息来拒绝爬虫 

有很多爬虫并不会以很高的并发连接爬取,一般不容易暴露自己;有些爬虫的来源IP分布很广,很难简单的通过封锁IP段地址来解决问题;另外还有很 多各种各样的小爬虫,它们在尝试Google以外创新的搜索方式,每个爬虫每天爬取几万的网页,几十个爬虫加起来每天就能消耗掉上百万动态请求的资源,由 于每个小爬虫单独的爬取量都很低,所以你很难把它从每天海量的访问IP地址当中把它准确的挖出来。 

这种情况下我们可以通过爬虫的User-Agent信息来识别。每个爬虫在爬取网页的时候,会声明自己的User-Agent信息,因此我们就可 以通过记录和分析User-Agent信息来挖掘和封锁爬虫。我们需要记录每个请求的User-Agent信息,对于Rails来说我们可以简单的在 app/controllers/application.rb里面添加一个全局的before_filter,来记录每个请求的User-Agent信 息: 
Ruby 代码 

  1. logger.info "HTTP_USER_AGENT #{request.env["HTTP_USER_AGENT"]}"    

然后统计每天的production.log,抽取User-Agent信息,找出访问量最大的那些User-Agent。要注意的是我们只关注 那些爬虫的User-Agent信息,而不是真正浏览器User-Agent,所以还要排除掉浏览器User-Agent,要做到这一点仅仅需要一行 shell: 
Ruby 代码 

  1. grep HTTP_USER_AGENT production.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko' | sort | uniq -c | sort -r -n | head -n 100 > bot.log    

统计结果类似这样: 
C代码 

  1. 57335 HTTP_USER_AGENT Baiduspider+(+http://www.baidu.com/search/spider.htm)  
  2. 56639 HTTP_USER_AGENT Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)  
  3. 42610 HTTP_USER_AGENT Mediapartners-Google  
  4. 19131 HTTP_USER_AGENT msnbot/2.0b (+http://search.msn.com/msnbot.htm)  

从日志就可以直观的看出每个爬虫的请求次数。要根据User-Agent信息来封锁爬虫是件很容易的事情,lighttpd配置如下: 
C代码 

  1. $HTTP["useragent"] =~ "qihoobot|^Java|Commons-HttpClient|Wget|^PHP|Ruby|Python" {  
  2.   url.rewrite = ( "^/(.*)" => "/crawler.html" )  
  3. }  

使用这种方式来封锁爬虫虽然简单但是非常有效,除了封锁特定的爬虫,还可以封锁常用的编程语言和HTTP类库的User-Agent信息,这样就 可以避免很多无谓的程序员用来练手的爬虫程序对网站的骚扰。 

还有一种比较常见的情况,就是某个搜索引擎的爬虫对网站爬取频率过高,但是搜索引擎给网站带来了很多流量,我们并不希望简单的封锁爬虫,仅仅是希望降低爬虫的请求频率,减轻爬虫对网站造成的负载,那么我们可以这样做: 
C代码 

  1. $HTTP["user-agent"] =~ "Baiduspider+" {  
  2.     connection.delay-seconds = 10  
  3. }  

对百度的爬虫请求延迟10秒钟再进行处理,这样就可以有效降低爬虫对网站的负载了。 

三、通过网站流量统计系统和日志分析来识别爬虫 

有些爬虫喜欢修改User-Agent信息来伪装自己,把自己伪装成一个真实浏览器的User-Agent信息,让你无法有效的识别。这种情况下 我们可以通过网站流量系统记录的真实用户访问IP来进行识别。 

主流的网站流量统计系统不外乎两种实现策略:一种策略是在网页里面嵌入一段js,这段js会向特定的统计服务器发送请求的方式记录访问量;另一种 策略是直接分析服务器日志,来统计网站访问量。在理想的情况下,嵌入js的方式统计的网站流量应该高于分析服务器日志,这是因为用户浏览器会有缓存,不一 定每次真实用户访问都会触发服务器的处理。但实际情况是,分析服务器日志得到的网站访问量远远高于嵌入js方式,极端情况下,甚至要高出10倍以上。 

现在很多网站喜欢采用awstats来分析服务器日志,来计算网站的访问量,但是当他们一旦采用Google Analytics来统计网站流量的时候,却发现GA统计的流量远远低于awstats,为什么GA和awstats统计会有这么大差异呢?罪魁祸首就是 把自己伪装成浏览器的网络爬虫。这种情况下awstats无法有效的识别了,所以awstats的统计数据会虚高。 

其实作为一个网站来说,如果希望了解自己的网站真实访问量,希望精确了解网站每个频道的访问量和访问用户,应该用页面里面嵌入js的方式来开发自 己的网站流量统计系统。自己做一个网站流量统计系统是件很简单的事情,写段服务器程序响应客户段js的请求,分析和识别请求然后写日志的同时做后台的异步 统计就搞定了。 

通过流量统计系统得到的用户IP基本是真实的用户访问,因为一般情况下爬虫是无法执行网页里面的js代码片段的。所以我们可以拿流量统计系统记录 的IP和服务器程序日志记录的IP地址进行比较,如果服务器日志里面某个IP发起了大量的请求,在流量统计系统里面却根本找不到,或者即使找得到,可访问 量却只有寥寥几个,那么无疑就是一个网络爬虫。 

分析服务器日志统计访问最多的IP地址段一行shell就可以了: 
C代码 

  1. grep Processing production.log | awk '{print $4}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200 > stat_ip.log    

然后把统计结果和流量统计系统记录的IP地址进行对比,排除真实用户访问IP,再排除我们希望放行的网页爬虫,比方Google,百度,微软 msn爬虫等等。最后的分析结果就就得到了爬虫的IP地址了。以下代码段是个简单的实现示意: 
Ruby 代码 

  1. whitelist = []  
  2. IO.foreach("#{RAILS_ROOT}/lib/whitelist.txt") { |line| whitelist << line.split[0].strip if line }  
  3.   
  4. realiplist = []  
  5. IO.foreach("#{RAILS_ROOT}/log/visit_ip.log") { |line|  realiplist << line.strip if line }  
  6.   
  7. iplist = []  
  8. IO.foreach("#{RAILS_ROOT}/log/stat_ip.log"do |line|  
  9.   ip = line.split[1].strip  
  10.   iplist << ip if line.split[0].to_i > 3000 && !whitelist.include?(ip) && !realiplist.include?(ip)  
  11. end   
  12.   
  13. Report.deliver_crawler(iplist)  

分析服务器日志里面请求次数超过3000次的IP地址段,排除白名单地址和真实访问IP地址,最后得到的就是爬虫IP了,然后可以发送邮件通知管 理员进行相应的处理。 

四、网站的实时反爬虫防火墙实现策略 

通过分析日志的方式来识别网页爬虫不是一个实时的反爬虫策略。如果一个爬虫非要针对你的网站进行处心积虑的爬取,那么他可能会采用分布式爬取策 略,比方说寻找几百上千个国外的代理服务器疯狂的爬取你的网站,从而导致网站无法访问,那么你再分析日志是不可能及时解决问题的。所以必须采取实时反爬虫 策略,要能够动态的实时识别和封锁爬虫的访问。 

要自己编写一个这样的实时反爬虫系统其实也很简单。比方说我们可以用memcached来做访问计数器,记录每个IP的访问频度,在单位时间之 内,如果访问频率超过一个阀值,我们就认为这个IP很可能有问题,那么我们就可以返回一个验证码页面,要求用户填写验证码。如果是爬虫的话,当然不可能填 写验证码,所以就被拒掉了,这样很简单就解决了爬虫问题。 

用memcache记录每个IP访问计数,单位时间内超过阀值就让用户填写验证码,用Rails编写的示例代码如下: 
Ruby 代码 

  1. ip_counter = Rails.cache.increment(request.remote_ip)  
  2. if !ip_counter  
  3.   Rails.cache.write(request.remote_ip, 1, :expires_in => 30.minutes)  
  4. elsif ip_counter > 2000  
  5.   render :template => 'test':status => 401 and return false  
  6. end  

这段程序只是最简单的示例,实际的代码实现我们还会添加很多判断,比方说我们可能要排除白名单IP地址段,要允许特定的User-Agent通 过,要针对登录用户和非登录用户,针对有无referer地址采取不同的阀值和计数加速器等等。 

此外如果分布式爬虫爬取频率过高的话,过期就允许爬虫再次访问还是会对服务器造成很大的压力,因此我们可以添加一条策略:针对要求用户填写验证码 的IP地址,如果该IP地址短时间内继续不停的请求,则判断为爬虫,加入黑名单,后续请求全部拒绝掉。为此,示例代码可以改进一下: 
Ruby 代码 

  1. before_filter :ip_firewall:except => :test  
  2. def ip_firewall  
  3.   render :file => "#{RAILS_ROOT}/public/403.html":status => 403 if BlackList.include?(ip_sec)  
  4. end  

我们可以定义一个全局的过滤器,对所有请求进行过滤,出现在黑名单的IP地址一律拒绝。对非黑名单的IP地址再进行计数和统计: 
Ruby 代码 

  1. ip_counter = Rails.cache.increment(request.remote_ip)  
  2. if !ip_counter  
  3.   Rails.cache.write(request.remote_ip, 1, :expires_in => 30.minutes)  
  4. elsif ip_counter > 2000  
  5.   crawler_counter = Rails.cache.increment("crawler/#{request.remote_ip}")  
  6.   if !crawler_counter  
  7.     Rails.cache.write("crawler/#{request.remote_ip}", 1, :expires_in => 10.minutes)  
  8.   elsif crawler_counter > 50  
  9.     BlackList.add(ip_sec)  
  10.     render :file => "#{RAILS_ROOT}/public/403.html":status => 403 and return false  
  11.   end  
  12.   render :template => 'test':status => 401 and return false  
  13. end  

如果某个IP地址单位时间内访问频率超过阀值,再增加一个计数器,跟踪他会不会立刻填写验证码,如果他不填写验证码,在短时间内还是高频率访问, 就把这个IP地址段加入黑名单,除非用户填写验证码激活,否则所有请求全部拒绝。这样我们就可以通过在程序里面维护黑名单的方式来动态的跟踪爬虫的情况, 甚至我们可以自己写个后台来手工管理黑名单列表,了解网站爬虫的情况。 

这个策略已经比较智能了,但是还不够好!我们还可以继续改进: 

1、用网站流量统计系统来改进实时反爬虫系统 

还记得吗?网站流量统计系统记录的IP地址是真实用户访问IP,所以我们在网站流量统计系统里面也去操作memcached,但是这次不是增加计 数值,而是减少计数值。在网站流量统计系统里面每接收到一个IP请求,就相应的cache.decrement(key)。所以对于真实用户的IP来说, 它的计数值总是加1然后就减1,不可能很高。这样我们就可以大大降低判断爬虫的阀值,可以更加快速准确的识别和拒绝掉爬虫。 

2、用时间窗口来改进实时反爬虫系统 

爬虫爬取网页的频率都是比较固定的,不像人去访问网页,中间的间隔时间比较无规则,所以我们可以给每个IP地址建立一个时间窗口,记录IP地址最 近12次访问时间,每记录一次就滑动一次窗口,比较最近访问时间和当前时间,如果间隔时间很长判断不是爬虫,清除时间窗口,如果间隔不长,就回溯计算指定 时间段的访问频率,如果访问频率超过阀值,就转向验证码页面让用户填写验证码。 

最终这个实时反爬虫系统就相当完善了,它可以很快的识别并且自动封锁爬虫的访问,保护网站的正常访问。不过有些爬虫可能相当狡猾,它也许会通过大 量的爬虫测试来试探出来你的访问阀值,以低于阀值的爬取速度抓取你的网页,因此我们还需要辅助第3种办法,用日志来做后期的分析和识别,就算爬虫爬的再 慢,它累计一天的爬取量也会超过你的阀值被你日志分析程序识别出来。 

总之我们综合运用上面的四种反爬虫策略,可以很大程度上缓解爬虫对网站造成的负面影响,保证网站的正常访问。

一、搜索引擎的蜘蛛,是不是爬得越多越好?

     当然不是!不论什么搜索引擎的爬虫,来抓取你网站的页面的时候,肯定在消耗你的网站资源,例如网站的连接数、网络带宽资源(空间流量)、服务器的负载。
另外,搜索引擎的爬虫来抓取你的页面数据后,它也不一定收用数据。只代表它“到此一游”留下痕迹而已。因此你的网站为它“服务过、接待过”。

     对于一个原创内容丰富,URL结构合理易于爬取的网站来说,简直就是各种爬虫的盘中大餐,很多网站的访问流量构成当中,爬虫带来的流量要远远超过真实用户访问流量,甚至爬虫流量要高出真实流量一个数量级。像提高网站有效利用率虽然设置了相当严格的反爬虫策略,但是网站处理的动态请求数量仍然是真实用户访问流量的2倍。可以肯定的说,当今互联网的网络流量至少有2/3的流量爬虫带来的。因此反爬虫是一个值得网站长期探索和解决的问题。

搜索引擎的主要工作流程(图)

搜索引擎爬虫对网站的负面影响。

1.网站有限的带宽资源,而爬虫的量过多,导致正常用户访问缓慢。
例如,原本虚拟主机主机的连接数受限,带宽资源也是有限。这种情况搜索引擎爬虫受影响呈现更明显。

2.搜索引擎爬虫过频密,抓取扫描很多无效页面。甚至抓页面抓到服务器报502、500 、504 等服务器内部错误了,蜘蛛爬虫还在不停使劲抓取。
不论是实际生产监控,还是网友反映,部分搜索引擎爬虫可用几个词来形容“坏蜘蛛”“恶爬虫”。很多讨论搜索引擎相关的文章,已经将它们列过排行榜。有兴趣的可更多了解它。

百度蜘蛛工作图

3.与网站主题不相关的搜索引擎爬虫消耗资源。
例如,典型的例子搜索引擎“一淘网蜘蛛(EtaoSpider)为一淘网抓取工具。”被各大电子商务购物网站屏蔽。拒绝一淘网抓取其商品信息及用户产生的点评内容。被禁止的原因首先应该是它们之间没有合作互利的关系,还有就是EtaoSpider爬虫是一个抓取最疯狂的蜘蛛。统计发现EtaoSpider爬虫的一天爬行量比“百度蜘蛛:Baiduspider”“360蜘蛛:360Spider”“SOSO蜘蛛:Sosospider”等主流蜘蛛爬虫多几倍,并且是远远的多。重点是EtaoSpider被抓取只会消耗你的网站资源,它不会给你带来访问量,或者其它对你有利用的。中文成语词典可用一个词来形容,这个词留给大家想吧。

4.一些搜索引擎开发程序员,它们写的爬虫程序在测试爬行。你懂的…

5.robots.txt文件不是万能!
肯定有很多人认为,在robots.txt设置屏蔽搜索引擎爬虫即可,或者允许某些特定的搜索引擎爬虫,能达到你预想效果。
不错正规的搜索引擎会遵守规则,且不会及时生效。实际中某些蜘蛛往往不是这样的,先扫描抓取你的页面,无视你的robots.txt。也可能它抓取后不一定留用;或者它只是统计信息,收集互联网行业趋势分析统计。

6.还有一种它们不是蜘蛛,但其有蜘蛛的特性。例如采集软件,采集程序,网络扫描e-mail地址的工具,各式各样的SEO分析统计工具,千奇百怪的网站漏洞扫描工具,等等,只有你想不到的工具,没有它做不到的…

二、有效指引搜索引擎对应的措施,及解决方法:

1.依据空间流量实际情况,就保留几个常用的屏蔽掉其它蜘蛛以节省流量。以暂时空间流量还足够使用,先保证正常浏览器优先。

2.从服务器防火墙iptable直接屏蔽蜘蛛IP段、详细的IP。这是最直接、有效的屏蔽方法。

3.WWW服务器层面做限制。例如Nginx,Squid,Lighttpd,直接通过“http_user_agent”屏蔽搜索引擎爬虫。

4.最后robots.txt文件做限制。搜索引擎国际规则还是要遵循规则的,让robots.txt明示公布于众。

后续文章会详细介绍该方法,包括如果发现蜘蛛,从网站的日志里统计蜘蛛,发现未知的蜘蛛。针对不同的蜘蛛,屏蔽蜘蛛、禁止爬虫怎么样更高效,更快捷。并且通过实例来介绍。

象形图示蜘蛛,爬虫机器人(图)

三、收集最新最准确各大搜索引擎蜘蛛名称

信息来源线上:最新最准确

根据线上空间的访问日志来整理常见的蜘蛛名称,不求最全,但力求爬虫信息资料最新最准确。以下搜索引擎蜘蛛名称都是根据线上空间日志亲手提取。
各种搜索引擎的蜘蛛爬虫会不断地访问抓取我们站点的内容,也会消耗站点的一定流量,有时候就需要屏蔽某些蜘蛛访问我们的站点。
其实有效常用的搜索引擎就那么几个,只要在robots.txt文件里把常用的几个搜索引擎蜘蛛允许放行就好了,其它的爬虫统统通过通配符(*)禁止掉,屏蔽某些蜘蛛。

现况:

从网上获取的搜索引擎蜘蛛名称,几乎都是原文复制粘贴的转载又转载的文章,而且很多的资料都是过期的了,这些旧资料根本就没修正和更新(实际用处不大),并且关于蜘蛛名称、大小写众说不一,根本就获取不到一个准确无误的资料信息。

最新最准确各大搜索引擎蜘蛛名称:
1、百度蜘蛛:Baiduspider
网上的资料百度蜘蛛名称有BaiduSpider、baiduspider等,都洗洗睡吧,那是旧黄历了。百度蜘蛛最新名称为Baiduspider。日志中还发现了Baiduspider-image这个百度旗下蜘蛛,查了下资料(其实直接看名字就可以了……),是抓取图片的蜘蛛。
常见百度旗下同类型蜘蛛还有下面这些:Baiduspider-mobile(抓取wap)、Baiduspider-image(抓取图片)、Baiduspider-video(抓取视频)、Baiduspider-news(抓取新闻)。
注:以上百度蜘蛛目前常见的是Baiduspider和Baiduspider-image两种。

2、谷歌蜘蛛:Googlebot
这个争议较少,但也有说是GoogleBot的。谷歌蜘蛛最新名称为“compatible; Googlebot/2.1;”。还发现了Googlebot-Mobile,看名字是抓取wap内容的。

3、360蜘蛛:360Spider,它是一个很“勤奋抓爬”的蜘蛛。

4、SOSO蜘蛛:Sosospider,也可为它颁一个“勤奋抓爬”奖的蜘蛛。

5、雅虎蜘蛛:“Yahoo! Slurp China”或者Yahoo! 
名称中带“Slurp”和空格,名称有空格robots里名称可以使用“Slurp”或者“Yahoo”单词描述,不知道有效无效。

6、有道蜘蛛:YoudaoBot,YodaoBot(两个名字都有,中文拼音少了个U字母读音差别很大嘎,这都会少?)

7、搜狗蜘蛛:Sogou News Spider
搜狗蜘蛛还包括如下这些:Sogou web spider、Sogou inst spider、Sogou spider2、Sogou blog、Sogou News Spider、Sogou Orion spider,
(参考一些网站的robots文件,搜狗蜘蛛名称可以用Sogou概括,无法验证不知道有没有效)

看看最权威的百度的robots.txt ,http://www.baidu.com/robots.txt 就为Sogou搜狗蜘蛛费了不少字节,占了一大块领地。
“Sogou web spider;Sogou inst spider;Sogou spider2;Sogou blog;Sogou News Spider;Sogou Orion spider”目前6个,名称都带空格。

线上常见"Sogou web spider/4.0" ;"Sogou News Spider/4.0" ;"Sogou inst spider/4.0" 可以为它颁个“占名为王”奖。

8、MSN蜘蛛:msnbot,msnbot-media(只见到msnbot-media在狂爬……)

9、必应蜘蛛:bingbot 
线上(compatible; bingbot/2.0;)

10、一搜蜘蛛:YisouSpider

11、Alexa蜘蛛:ia_archiver

12、宜搜蜘蛛:EasouSpider

13、即刻蜘蛛:JikeSpider

14、一淘网蜘蛛:EtaoSpider
"Mozilla/5.0 (compatible; EtaoSpider/1.0; http://省略/EtaoSpider)"

根据上述蜘蛛中选择几个常用的允许抓取,其余的都可以通过robots屏蔽抓取。如果你暂时空间流量还足够使用,等流量紧张了就保留几个常用的屏蔽掉其它蜘蛛以节省流量。至于那些蜘蛛抓取对网站能带来有利用的价值,网站的管理者眼睛是雪亮的。

另外还发现了如 YandexBot、AhrefsBot和ezooms.bot这些蜘蛛,据说这些蜘蛛国外噶,对中文网站用处很小。那不如就节省下资源。

小结:
这次分析了对搜索引擎爬虫的危害,蜘蛛对网站的负面影响;如何有效指引搜索引擎对应的措施,及解决方法;收集来源线上最新最准确各大搜索引擎蜘蛛名称。

 

网站建设好了,当然是希望网页被搜索引擎收录的越多越好,但有时候我们也会碰到网站不需要被搜索引擎收录的情况。

比如,你要启用一个新的域名做镜像网站,主要用于PPC 的推广,这个时候就要想办法屏蔽搜索引擎蜘蛛抓取和索引我们镜像网站的所有网页。因为如果镜像网站也被搜索引擎收录的话,很有可能会影响官网在搜索引擎的权重,这肯定是我们不想看到的结果。

以下列举了屏蔽主流搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路。注意:是整站屏蔽,而且是尽可能的屏蔽掉所有主流搜索引擎的爬虫(蜘蛛)。

1、通过 robots.txt 文件屏蔽

可以说 robots.txt 文件是最重要的一种渠道(能和搜索引擎建立直接对话)。我通过分析我自己博客的服务器日志文件,给出以下建议(同时欢迎网友补充):

User-agent: Baiduspider

Disallow: /

User-agent: Googlebot

Disallow: /

User-agent: Googlebot-Mobile

Disallow: /

User-agent: Googlebot-Image

Disallow:/

User-agent: Mediapartners-Google

Disallow: /

User-agent: Adsbot-Google

Disallow: /

User-agent:Feedfetcher-Google

Disallow: /

User-agent: Yahoo! Slurp

Disallow: /

User-agent: Yahoo! Slurp China

Disallow: /

User-agent: Yahoo!-AdCrawler

Disallow: /

User-agent: YoudaoBot

Disallow: /

User-agent: Sosospider

Disallow: /

User-agent: Sogou spider

Disallow: /

User-agent: Sogou web spider

Disallow: /

User-agent: MSNBot

Disallow: /

User-agent: ia_archiver

Disallow: /

User-agent: Tomato Bot

Disallow: /

User-agent: *

Disallow: /

2、通过 meta tag 屏蔽

在所有的网页头部文件添加,添加如下语句:

<meta name="robots" content="noindex, nofollow">

3、通过服务器(如:Linux/nginx )配置文件设置

直接过滤 spider/robots 的IP 段。

小注:第1招和第2招只对“君子”有效,防止“小人”要用到第3招(“君子”和“小人”分别泛指指遵守与不遵守 robots.txt 协议的 spider/robots),所以网站上线之后要不断跟踪分析日志,筛选出这些 badbot 的ip,然后屏蔽之。

这里有一个badbot ip 数据库:http://www.spam-whackers.com/bad.bots.htm

4、通过搜索引擎提供的站长工具,删除网页快照

比如,有的时候百度不严格遵守 robots.txt 协议,可以通过百度提供的“网页投诉”入口删除网页快照。百度网页投诉中心:http://tousu.baidu.com/webmaster/add

如下图是我的一个网页投诉:

張相片

大概3天左右的时间过去,这个网页的百度快照也被删除,说明此种方法也能起效,当然这是不得而为之,属于亡羊补牢。

5、补充更新

可以通过检测 HTTP_USER_AGENT 是否为爬虫/蜘蛛访问,然后直接返回403 状态码屏蔽之。比如:由于api 权限与微博信息隐私保护原因,Xweibo 2.0 版本后禁止搜索引擎收录。

張相片

关于如何屏蔽搜索引擎爬虫(蜘蛛)抓取/索引/收录网页,您有其他什么更好的建议或者方法,也欢迎发表评论!期待与您交流。

本文作者:Bruce

原文地址:http://www.wuzhisong.com/blog/67/

 

首先,我来介绍一下什么是robots.txt:robots.txt是搜索引擎中访问网站的时候要查 看的第一个文件。Robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是 否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有 被口令保护的页面。最后,robots.txt必须放置在一个站点的根目录下。 

大家可以参考一下谷歌、百度和腾讯的robots写法: 

http://www.google.com/robots.txt 

http://www.baidu.com/robots.txt 

http://www.qq.com/robots.txt 

大家了解完robots.txt后,那么我们可以用robots.txt来做什么? 

1、用robots.txt屏蔽相似度高的页面或没内容的页面。 

我们知道,搜索引擎收录网页后,会对网页进行“审核”,而当两个网页的相似度很高时,那么搜索引擎就会删除掉其中一个,并且会降低一点你网站的得分。 

假设以下这两个链接,内容其实差不多,那么第一个链接就应该屏蔽掉。 

/XXX?123 

/123.html 

像第一个的链接这样的链接非常多,那么我们要怎么屏蔽呢?其实只要屏蔽/XXX?就可以屏蔽所有的链接了。 

代码如下: 

Disallow: /XXX? 

同理,一些没有内容的页面我们也可以利用相同的办法将其屏蔽掉。 

2、用robots.txt屏蔽多余的链接,一般保留静态的链接(既HTML、htm、shtml等)。 

由于网站中经常会出现多个链接指向同一个页面的情况,而这样会让搜索引擎对网站的友好度降低。为了避免这一个情况,我们就可以通过robots.txt把 非主要的链接去掉。

比如以下两个链接指向同样的页面: 

/OOO?123 

/123.html 

那么我们就应该去掉第一个垃圾,代码如下: 

Disallow: /OOO?123 

3、用robots.txt屏蔽死链 

死链就是曾经存在的网页,因为改版或其他原因而失去效用后就变成死链,也就是说看似一个正常的网页链接,但点击后不能打开相对应的网页页面。 

比如,原来在目录为/seo下的所有链接,因为目录地址的改变,现在都变成死链接了,那么我们可以用robots.txt把他屏蔽掉,代码如下: 

Disallow: /seo/ 

4、告诉搜索引擎你的sitemap.xml地址 

利用robots.txt可以告诉搜索引擎你sitemap.xml文件的地址,而不需要在网站上添加sitemap.xml的链接。具体代码如下: 

Sitemap: 你的sitemap地址 

以上就是robots.txt的基本用法,一个好的网站必定会有一个好的robots.txt,因为robots.txt是搜索引擎了解你网站的一 个途径。另外在这里我推荐一下一个比较适合wordpress用户使用的robots.txt写法: 

User-agent: * 

Disallow: /wp- 

Disallow: /feed/ 

Disallow: /comments/feed 

Disallow: /trackback/ 

Sitemap: http://rainjer.com/sitemap.xml 

最后,如果你觉得上面所说的还不能满足你的需要,那么你可以在谷歌或百度官方提供的robots.txt使用指南学习: 

百度:http://www.baidu.com/search/robots.html 

谷歌:http://www.google.com/support/forum/p/webmasters/thread?tid=4dbbe5f3cd2f6a13&hl=zh-CN

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注