首页 > 开发 > PHP > 正文

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

2024-05-04 23:39:02
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结,多种方法总有一种适合你,防止搜索引擎蜘蛛拖死搜索引擎

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. function dstrpos($string, $arr, $returnvalue = false) { 
  11. if(empty($string)) return false
  12. foreach((array)$arr as $v) { 
  13. if(strpos($string, $v) !== false) { 
  14. $return = $returnvalue ? $v : true
  15. return $return
  16. return false
  17. if(checkrobot()){ 
  18. echo '机器人爬虫'
  19. }else
  20. echo '人'
  21. ?> 

实际应用中可以这样判断,直接不是搜索引擎才执行操作

 

 
  1. <?php 
  2. if(!checkrobot()){ 
  3. //do something 
  4. ?> 

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); 

第三种方法:

我们可以通过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;  

下面的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 "你不是蜘蛛精啊!";  

第四种方法:

 

 
  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. if($flag == false){ 
  31. header("Location: http://www.vevb.com" . $_SERVER['REQUEST_URI']); 
  32. // 自动转到http://www.vevb.com 对应的网页 
  33. // $_SERVER['REQUEST_URI'] 为域名后面的路径 
  34. // 或换成header("Location: http://www.vevb.com/abc/d.php"); 
  35. exit(); 
  36. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表