今天去面试一家大型互联网公司的时候,被面试官的一个问题难住了,其实也不是什么很难的问题,但是由于平时用的少,就没有回答的很完美。
面试官问:屏蔽百度蜘蛛的方法有几种,我回答说有两种:第一种是使用robots.txt,即蜘蛛协议;第二种就是nofollow。面试官似乎都这个答案不是很满意,后来我又查资料才发现,屏蔽蜘蛛的方式其实是有四种。下面马兔子来将这四种方法一一列出:
方法一:robots.txt屏蔽百度或某一爬虫抓取
打开robots.txt,在开头加入如下语句(以百度蜘蛛为例):
User-agent: baiduspider
Disallow:/
代码分析,首先要知道该爬虫的名称,如百度爬虫是Baiduspider,Google爬虫是Googlebot,360搜索爬虫是360Spider,你可以通过各大搜索引擎蜘蛛爬虫UA汇总来获取爬虫的名称,例如,微软必应的蜘蛛UA是:
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.google.com/bingbot.htm)"
我们就可以知道它的爬虫名称为Googlebot。
方法二:robots Meta标签屏蔽百度蜘蛛或者某一爬虫抓取
这种方法可以用来设置某一个页面对蜘蛛抓取的屏蔽:
<head> …
<meta name="robots" content="noindex,nofollow"/>
</head>
当然了,上面的写法是屏蔽了所有的蜘蛛,如果只是想屏蔽某一个特定的蜘蛛,例如百度蜘蛛,那么可以这样写:
<head> …
<meta name="Baiduspider" content="noindex,nofollow"/>
</head>
方法三:.htaccess屏蔽百度或某一爬虫抓取(Hypertext Access(超文本入口))
由于一些蜘蛛并不会遵循蜘蛛协议(robots.txt),所以我们需要通过.htaccess来屏蔽它,以百度蜘蛛为例:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*Baiduspider.* [NC]
RewriteRule .* - [F]
如果是Apache服务器,可以修改配置文件 httpd.conf ,这样写(/var/www/html 是根目录):
...
SetEnvIfNoCase User-Agent ^.*Baiduspider.* bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
...
如果是Nginx服务器,可以修改配置文件( 默认是 nginx.conf ),这样写:
Server{
...
location/ {
if ($http_user_agent !~ Baiduspider) {
return 403;
}
}
...
}
方法四:通过IP屏蔽百度或某一爬虫抓取
这种方法需要我们通过网站的日志进行分析,筛选出来爬虫的IP地址,然后通过服务器防火墙屏蔽该IP,这样就可以通过IP来准确屏蔽蜘蛛了。但是由于这样需要大量的分析,且搜索引擎蜘蛛的IP也是不可能获取完的,很少有人会用这种方法。
请添加微信后购买资源
马兔子微信