黑帽联盟

 找回密码
 会员注册
查看: 2131|回复: 2
打印 上一主题 下一主题

[技术文章] PHP判断来访是搜索引擎蜘蛛还是普通用户

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

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

    1、推荐的一种方法:php判断搜索引擎蜘蛛爬虫还是人为访问代码
    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.         $useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);
    6.         if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;
    7.         if(dstrpos($useragent, $kw_spiders)) return true;
    8.         return false;
    9. }
    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.                 }
    17.         }
    18.         return false;
    19. }
    20. if(checkrobot()){
    21.         echo '机器人爬虫';
    22. }else{
    23.         echo '人';
    24. }
    25. ?>
    复制代码
    实际应用中可以这样判断,直接不是搜索引擎才执行操作
    1. <?php
    2. if(!checkrobot()){
    3. //do something
    4. }
    5. ?>
    复制代码
    2、第二种方法:
    使用PHP实现蜘蛛访问日志统计
    1. $useragent = addslashes(strtolower($_SERVER['HTTP_USER_AGENT']));

    2. if (strpos($useragent, 'googlebot')!== false){$bot = 'Google';}
    3. elseif (strpos($useragent,'mediapartners-google') !== false){$bot = 'Google Adsense';}
    4. elseif (strpos($useragent,'baiduspider') !== false){$bot = 'Baidu';}
    5. elseif (strpos($useragent,'sogou spider') !== false){$bot = 'Sogou';}
    6. elseif (strpos($useragent,'sogou web') !== false){$bot = 'Sogou web';}
    7. elseif (strpos($useragent,'sosospider') !== false){$bot = 'SOSO';}
    8. elseif (strpos($useragent,'360spider') !== false){$bot = '360Spider';}
    9. elseif (strpos($useragent,'yahoo') !== false){$bot = 'Yahoo';}
    10. elseif (strpos($useragent,'msn') !== false){$bot = 'MSN';}
    11. elseif (strpos($useragent,'msnbot') !== false){$bot = 'msnbot';}
    12. elseif (strpos($useragent,'sohu') !== false){$bot = 'Sohu';}
    13. elseif (strpos($useragent,'yodaoBot') !== false){$bot = 'Yodao';}
    14. elseif (strpos($useragent,'twiceler') !== false){$bot = 'Twiceler';}
    15. elseif (strpos($useragent,'ia_archiver') !== false){$bot = 'Alexa_';}
    16. elseif (strpos($useragent,'iaarchiver') !== false){$bot = 'Alexa';}
    17. elseif (strpos($useragent,'slurp') !== false){$bot = '雅虎';}
    18. elseif (strpos($useragent,'bot') !== false){$bot = '其它蜘蛛';}
    19. if(isset($bot)){
    20.    $fp = @fopen('bot.txt','a');
    21.    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");
    22.    fclose($fp);
    23. }
    复制代码
    第三种方法:
    我们可以通过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.cnblackhat.com" . $_SERVER['REQUEST_URI']);
    33.   // 自动转到http://www.cnblackhat.com 对应的网页
    34.   // $_SERVER['REQUEST_URI'] 为域名后面的路径
    35.   // 或换成header("Location: http://www.cnblackhat.com/xxxx");
    36.   exit();
    37. }
    38. ?>
    复制代码
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    8

    主题

    0

    听众

    25

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情
    开心
    2017-6-27 11:32
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    谢谢分享
    回复

    使用道具 举报

    148

    主题

    9

    听众

    337

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    擦汗
    2018-6-6 11:33
  • 签到天数: 348 天

    [LV.8]以坛为家I

    黑帽seo当中还是可以用到很多地方的,学习了
    来自安卓客户端来自安卓客户端
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部