在网站开发过程中,有时候我们需要判断网站的访客是有血有肉的人类,还是蜘蛛。
– 比如需要统计网站里面文章的访问数量的时候,把蜘蛛访问过滤掉是很有必要的。
– 有些蜘蛛不是很流氓,不会遵守 robots.txt 里面的规则,这时候就需要通过程序直接屏蔽掉。
判断蜘蛛访问的代码
很简单,通过判断 HTTP_USER_AGENT 中是否包含蜘蛛的特征码,如果有这些特征码,就说明这些访问者是蜘蛛,对其进行相应的操作即可。
//蜘蛛ua特征码 $bots = array ( 'Google Bot' => 'googlebot' , 'Google Bot' => 'google' , 'MSN' => 'msnbot' , 'Alex' => 'ia_archiver' , 'Lycos' => 'lycos' , 'Ask Jeeves' => 'jeeves' , 'Altavista' => 'scooter' , 'AllTheWeb' => 'fast-webcrawler' , 'Inktomi' => 'slurp@inktomi' , 'Turnitin.com' => 'turnitinbot' , 'Technorati' => 'technorati' , 'Yahoo' => 'yahoo' , 'Findexa' => 'findexa' , 'NextLinks' => 'findlinks' , 'Gais' => 'gaisbo' , 'WiseNut' => 'zyborg' , 'WhoisSource' => 'surveybot' , 'Bloglines' => 'bloglines' , 'BlogSearch' => 'blogsearch' , 'PubSub' => 'pubsub' , 'Syndic8' => 'syndic8' , 'RadioUserland' => 'userland' , 'Gigabot' => 'gigabot' , 'Become.com' => 'become.com' , 'Baidu' => 'baiduspider' , 'so.com' => '360spider' , 'Sogou' => 'spider' , 'soso.com' => 'sosospider' , 'Yandex' => 'yandex' ); $useragent = $_SERVER['HTTP_USER_AGENT']; foreach ( $bots as $name => $lookfor ) { if ( stristr( $useragent, $lookfor ) !== false ) { $is_robot = true; break; } }
很显然,代码中包含的蜘蛛 UA 特征码显然是不全的,但是足够判断大多数蜘蛛了,如果你需要更精确的判断,请参考以下两个链接。
– [蜘蛛UA列表](http://user-agent-string.info/list-of-ua/bots)
– [浏览器UA列表](http://user-agent-string.info/list-of-ua)