如何识别搜索引擎爬虫

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2

如何识别搜索引擎爬虫
方法很多:

1 通过识别指定爬虫所有IP

如google官方就提到:

如何验证谷歌抓取机器人(Googlebot)

2008年2月24日 下午 02:41:00

发表者 Matt Cutts, 软件工程师
发表于: 2006年9月20日,周三, 上午11时45分

最近我听到一些聪明人士要求搜索引擎提供一种方法来验证一个抓取机器人是正宗的。毕竟,任何垃圾制造者都可以用Googlebot来命名他们的抓取机器人,并声称自己是Google的。那么,你应该信任哪些抓取机器人,又应该阻截哪些?

我们听到最普遍的要求是把Googlebot的IP地址列表公布给大家。这个做法的问题是,如果/当我们的抓取工具的IP地址范围改变时,并非每个人都知 道去检查。事实上,爬行组几年前搬迁过Googlebot的IP地址,他们遇到的一个真正的麻烦是提醒一些把Googlebot的IP范围写在他们的程序 里的网管们。所以爬行组的成员们提供了另一种方法来验证Googlebot。这里是爬行组成员们提供的一个答案(经他们同意在此引述) :
请告诉网站管理员们,最好的方法看来是使用域名解析服务器(DNS)来核实每个案例。我推荐的验证技术是做反向DNS查找,核实该名字是在https://www.360docs.net/doc/8111707379.html,域名内,然后使用该https://www.360docs.net/doc/8111707379.html,名做一个相应的正向DNS->IP的查找; 例如:
(译者注:以下是Linux命令及执行结果)

> host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer https://www.360docs.net/doc/8111707379.html,.
(1.66.249.66.in-addr.arpa域名指针https://www.360docs.net/doc/8111707379.html,)

> host https://www.360docs.net/doc/8111707379.html,
https://www.360docs.net/doc/8111707379.html, has address 66.249.66.1
(https://www.360docs.net/doc/8111707379.html,的IP地址是66.249.66.1)我认为只做反向DNS查找是不够的,因为一个垃圾制造者可以建立反向的DNS来指向https://www.360docs.net/doc/8111707379.html,。

这个答案也是我们内部的技术帮助中心提供给我的,所以我认为这是一个验证Googlebot的官方方法。为了从“官方的”Googlebot IP范围内抓取,抓取机器人要尊重robots.txt和我们内部的主机负荷惯例,从而使Google不过分爬行您的网站。

2 通过HTTP header 内的 HTTP USER AGENT 识别

这是Google Header:

GET / HTTP/1.1
Host: https://www.360docs.net/doc/8111707379.html,
Connection: Keep-alive
Accept: */*
From: googlebot(at)https://www.360docs.net/doc/8111707379.html,
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.360docs.net/doc/8111707379.html,/bot.html)
Accept-Encoding: gzip,deflate以下是常见爬虫的HTTP USER AGENT

百度爬虫
Baiduspider+(+https://www.360docs.net/doc/8111707379.html,/search/spider.htm)

雅虎爬虫,分别是雅虎中国和美国总部的爬虫
Mozilla/5.0 (compatible; Yahoo! Slurp China; https://www.360docs.net/doc/8111707379.html,/help.html)
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.y

https://www.360docs.net/doc/8111707379.html,/help/us/ysearch/slurp)

新浪爱问爬虫
iaskspider/2.0(+https://www.360docs.net/doc/8111707379.html,/help/help_index.html)
Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)

搜狗爬虫
Sogou web spider/3.0(+https://www.360docs.net/doc/8111707379.html,/docs/help/webmasters.htm#07″)
Sogou Push Spider/3.0(+https://www.360docs.net/doc/8111707379.html,/docs/help/webmasters.htm#07″)
【早期用法:“sogou spider”】

Google爬虫
Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.360docs.net/doc/8111707379.html,/bot.html)

Google AdSense广告内容匹配爬虫
Mediapartners-Google/2.1

网易爬虫
Mozilla/5.0 (compatible; YodaoBot/1.0; https://www.360docs.net/doc/8111707379.html,/help/webmaster/spider/;)
【早期采用“ OutfoxBot/0.5 (for internet experiments; http://”; outfoxbot@https://www.360docs.net/doc/8111707379.html,)”】

Alexa排名爬虫
ia_archiver

美国斯坦福大学的一个学生研究项目
Mozilla/5.0 (Twiceler-0.9 https://www.360docs.net/doc/8111707379.html,/twiceler/robot.html)

MSN爬虫
msnbot/1.0 (+https://www.360docs.net/doc/8111707379.html,/msnbot.htm)
特点未知
msnbot-media/1.0 (+https://www.360docs.net/doc/8111707379.html,/msnbot.htm)
(欢迎补充资料)
特点未知

DigExt并非一个独立的爬虫程序,而是IE5的“允许脱机阅读”模式标记。
Mozilla/4.0(compatible; MSIE 5.0; Windows 98; DigExt)

Indy Library本来是个开源程序库,但後来被spam bots冒用
Mozilla/3.0 (compatible; Indy Library)

据称为北大天网的搜索引擎爬虫程序
P.Arthur 1.1

名字上看来是Qihoo的
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0)
特点未知

Gigabot搜索引擎爬虫。已被google收购?(欢迎补充资料)
Gigabot/2.0 (https://www.360docs.net/doc/8111707379.html,/spider.html)

开源的网络爬虫,一个数字图书馆项目。
Mozilla/5.0 (compatible; heritrix/1.10.2 +https://www.360docs.net/doc/8111707379.html,/)

如下举例说明如何使用程序来判断,以PHP程序为例

/**
* 是否是允许的爬虫在访问 使用字符串查找方式
* @return boolean
*/
function is_allow_spider(){
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
//spider allow lists
$allow_spiders = array(
'Baiduspider',
'Googlebot'
);
foreach($allow_spiders as $spider){
$spider = strtolower($spider);
if(strpos($user_agent,$spider) !== false){
return true;
}
}
return false;
}/**
* 是否是允许的爬虫在访问 使用正则匹配方式
* @return boolean
*/
function is_allow_spider2(){
$user_agent = $_SERVER['HTTP_USER_AGENT'];
//spider allow lists
$allow_spiders = array(
'Baiduspider',
'Googlebot'
);
foreach($allow_spiders as $spider){
$spider = preg_quote($spider,'/');
if(preg_match("/$spider/i", $user_agent)){
return true;
}
}
return false;
}第2个函数使用正则,但涉及到对”/” ,”\”等字符转义问题,如果$allow_spiders内的值含有”/” or “\”,处理比较麻烦,大家如果有好的方法不妨评论里写下,以便分享。
注:HTTP USER AGENT 标记可以模拟,请不要完全对其信任。

3 如果还有其他方

法,大家在评论里分享下吧:)

相关文档
最新文档