找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2003|回复: 0

[分享] PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结

[复制链接]
发表于 2017-11-15 07:59:57 | 显示全部楼层 |阅读模式 来自 河南省新乡市
1、推荐的一种方法:php判断搜索引擎蜘蛛爬虫还是人为访问代码,摘自Discuz x3.2
  1. <?php  
  2. function checkrobot($useragent=''){  
  3.     static $kw_spiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');  
  4.     static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla');  
  5.    
  6.     $useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);  
  7.     if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;  
  8.     if(dstrpos($useragent, $kw_spiders)) return true;  
  9.     return false;  
  10. }  
  11. function dstrpos($string, $arr, $returnvalue = false) {  
  12.     if(empty($string)) return false;  
  13.     foreach((array)$arr as $v) {  
  14.         if(strpos($string, $v) !== false) {  
  15.             $return = $returnvalue ? $v : true;  
  16.             return $return;  
  17.         }  
  18.     }  
  19.     return false;  
  20. }  
  21. if(checkrobot()){  
  22.     echo '机器人爬虫';  
  23. }else{  
  24.     echo '人';  
  25. }  
  26. ?>  
复制代码
实际应用中可以这样判断,直接不是搜索引擎才执行操作
  1. <?php  
  2. if(!checkrobot()){  
  3. //do something  
  4. }  
  5. ?>
复制代码
2、第二种方法:
使用PHP实现蜘蛛访问日志统计
  1. $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));  
  2.    
  3. if (strpos($useragent, 'googlebot')!== false){$bot = 'Google';}  
  4. elseif (strpos($useragent,'mediapartners-google') !== false){$bot = 'Google Adsense';}  
  5. elseif (strpos($useragent,'baiduspider') !== false){$bot = 'Baidu';}  
  6. elseif (strpos($useragent,'sogou spider') !== false){$bot = 'Sogou';}  
  7. elseif (strpos($useragent,'sogou web') !== false){$bot = 'Sogou web';}  
  8. elseif (strpos($useragent,'sosospider') !== false){$bot = 'SOSO';}  
  9. elseif (strpos($useragent,'360spider') !== false){$bot = '360Spider';}  
  10. elseif (strpos($useragent,'yahoo') !== false){$bot = 'Yahoo';}  
  11. elseif (strpos($useragent,'msn') !== false){$bot = 'MSN';}  
  12. elseif (strpos($useragent,'msnbot') !== false){$bot = 'msnbot';}  
  13. elseif (strpos($useragent,'sohu') !== false){$bot = 'Sohu';}  
  14. elseif (strpos($useragent,'yodaoBot') !== false){$bot = 'Yodao';}  
  15. elseif (strpos($useragent,'twiceler') !== false){$bot = 'Twiceler';}  
  16. elseif (strpos($useragent,'ia_archiver') !== false){$bot = 'Alexa_';}  
  17. elseif (strpos($useragent,'iaarchiver') !== false){$bot = 'Alexa';}  
  18. elseif (strpos($useragent,'slurp') !== false){$bot = '雅虎';}  
  19. elseif (strpos($useragent,'bot') !== false){$bot = '其它蜘蛛';}  
  20. if(isset($bot)){  
  21.    $fp = @fopen('bot.txt','a');  
  22.    fwrite($fp,date('Y-m-d H:i:s')."\t".$_SERVER["REMOTE_ADDR"]."\t".$bot."\t".'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]."\r\n");  
  23.    fclose($fp);  
  24. }  
复制代码
第三种方法:
我们可以通过HTTP_USER_AGENT来判断是否是蜘蛛,搜索引擎的蜘蛛都有自己的独特标志,下面列取了一部分。
  1. function is_crawler() {   
  2.   $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);   
  3.   $spiders = array(   
  4.     'Googlebot', // Google 爬虫   
  5.     'Baiduspider', // 百度爬虫   
  6.     'Yahoo! Slurp', // 雅虎爬虫   
  7.     'YodaoBot', // 有道爬虫   
  8.     'msnbot' // Bing爬虫   
  9.     // 更多爬虫关键字   
  10.   );   
  11.   foreach ($spiders as $spider) {   
  12.     $spider = strtolower($spider);   
  13.     if (strpos($userAgent, $spider) !== false) {   
  14.       return true;   
  15.     }   
  16.   }   
  17.   return false;   
  18. }  
复制代码
下面的php代码附带了更多的蜘蛛标识
  1. function isCrawler() {   
  2.     echo $agent= strtolower($_SERVER['HTTP_USER_AGENT']);   
  3.     if (!empty($agent)) {   
  4.         $spiderSite= array(   
  5.             "TencentTraveler",   
  6.             "Baiduspider+",   
  7.             "BaiduGame",   
  8.             "Googlebot",   
  9.             "msnbot",   
  10.             "Sosospider+",   
  11.             "Sogou web spider",   
  12.             "ia_archiver",   
  13.             "Yahoo! Slurp",   
  14.             "YoudaoBot",   
  15.             "Yahoo Slurp",   
  16.             "MSNBot",   
  17.             "Java (Often spam bot)",   
  18.             "BaiDuSpider",   
  19.             "Voila",   
  20.             "Yandex bot",   
  21.             "BSpider",   
  22.             "twiceler",   
  23.             "Sogou Spider",   
  24.             "Speedy Spider",   
  25.             "Google AdSense",   
  26.             "Heritrix",   
  27.             "Python-urllib",   
  28.             "Alexa (IA Archiver)",   
  29.             "Ask",   
  30.             "Exabot",   
  31.             "Custo",   
  32.             "OutfoxBot/YodaoBot",   
  33.             "yacy",   
  34.             "SurveyBot",   
  35.             "legs",   
  36.             "lwp-trivial",   
  37.             "Nutch",   
  38.             "StackRambler",   
  39.             "The web archive (IA Archiver)",   
  40.             "Perl tool",   
  41.             "MJ12bot",   
  42.             "Netcraft",   
  43.             "MSIECrawler",   
  44.             "WGet tools",   
  45.             "larbin",   
  46.             "Fish search",   
  47.         );   
  48.         foreach($spiderSite as $val) {   
  49.             $str = strtolower($val);   
  50.             if (strpos($agent, $str) !== false) {   
  51.                 return true;   
  52.             }   
  53.         }   
  54.     } else {   
  55.         return false;   
  56.     }   
  57. }   
  58. if (isCrawler()){   
  59.     echo "你好蜘蛛精!";   
  60. }   
  61. else{   
  62.    echo "你不是蜘蛛精啊!";   
  63. }  
复制代码
第四种方法:
  1. <?php  
  2. $flag = false;  
  3. $tmp = $_SERVER['HTTP_USER_AGENT'];  
  4. if(strpos($tmp, 'Googlebot') !== false){  
  5.   $flag = true;  
  6. } else if(strpos($tmp, 'Baiduspider') >0){  
  7.   $flag = true;  
  8. } else if(strpos($tmp, 'Yahoo! Slurp') !== false){  
  9.   $flag = true;  
  10. } else if(strpos($tmp, 'msnbot') !== false){  
  11.   $flag = true;  
  12. } else if(strpos($tmp, 'Sosospider') !== false){  
  13.   $flag = true;  
  14. } else if(strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false){  
  15.   $flag = true;  
  16. } else if(strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false){  
  17.   $flag = true;  
  18. } else if(strpos($tmp, 'fast-webcrawler') !== false){  
  19.   $flag = true;  
  20. } else if(strpos($tmp, 'Gaisbot') !== false){  
  21.   $flag = true;  
  22. } else if(strpos($tmp, 'ia_archiver') !== false){  
  23.   $flag = true;  
  24. } else if(strpos($tmp, 'altavista') !== false){  
  25.   $flag = true;  
  26. } else if(strpos($tmp, 'lycos_spider') !== false){  
  27.   $flag = true;  
  28. } else if(strpos($tmp, 'Inktomi slurp') !== false){  
  29.   $flag = true;  
  30. }  
  31. if($flag == false){  
  32.   header("Location: http://www.jb51.net" . $_SERVER['REQUEST_URI']);  
  33.   // 自动转到http://www.jb51.net 对应的网页  
  34.   // $_SERVER['REQUEST_URI'] 为域名后面的路径  
  35.   // 或换成header("Location: http://www.jb51.net/abc/d.php");  
  36.   exit();  
  37. }  
  38. ?>  
复制代码


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-5-12 08:59 , Processed in 0.041650 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表