判断访问者是否是搜索引擎

有的时候我们需要针对搜索引擎抓取做一些特殊的回应、所以要用到判断是否为搜索引擎的方法,我在网上找了几种来做个笔记,就先不验证效果了。

第一种
来源:php判断是否搜索引擎 – php

function strexists($haystack, $needle) {
       return !(strpos($haystack, $needle) === FALSE);
} 
/*
*检验搜索
*/
function getrobot() {   
    if(!defined('IS_ROBOT')) {   
        $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';   
        $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';   
        if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {   
            define('IS_ROBOT', FALSE);   
        } elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {   
            define('IS_ROBOT', TRUE);   
        } else {   
            define('IS_ROBOT', FALSE);   
        }   
    }   
    return IS_ROBOT;   
}

看代码这一种方法是判断来访者是不是某一种浏览器,如果是的话就判断为用户,不是的话就判断为蜘蛛。
第二种
来源:PHP判断搜索引擎来路跳转代码 – 搜索优化 – 红黑联盟
[略修改]

<?php
$flag = false;
$tmp = $_SERVER['HTTP_USER_AGENT'];
if(strpos($tmp, ‘Googlebot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Baiduspider’) >0){
$flag = true;
} else if(strpos($tmp, ‘Yahoo! Slurp’) !== false){
$flag = true;
} else if(strpos($tmp, ‘msnbot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Sosospider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘YodaoBot’) !== false || strpos($tmp, ‘OutfoxBot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Sogou web spider’) !== false || strpos($tmp, ‘Sogou Orion spider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘fast-webcrawler’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Gaisbot’) !== false){
$flag = true;
} else if(strpos($tmp, ‘ia_archiver’) !== false){
$flag = true;
} else if(strpos($tmp, ‘altavista’) !== false){
$flag = true;
} else if(strpos($tmp, ‘lycos_spider’) !== false){
$flag = true;
} else if(strpos($tmp, ‘Inktomi slurp’) !== false){
$flag = true;
}
if($flag == false){
header(“Location: 正常访问地址”);
exit();
}
else
{
//做点什么事反馈搜索引擎
}

这种方法很明显就是匹配搜索引擎列表

第三种
来源:php 判断是否为搜索引擎蜘蛛 转载 – 龙圆 – 博客园(由于来源博主没有指明更早来源,所以不能找到最初来源)

function isCrawler() {
        $agent= strtolower($_SERVER['HTTP_USER_AGENT']);
        if (!empty($agent)) {
                $spiderSite= array(
                        "TencentTraveler",
                        "Baiduspider+",
                        "BaiduGame",
                        "Googlebot",
                        "msnbot",
                        "Sosospider+",
                        "Sogou web spider",
                        "ia_archiver",
                        "Yahoo! Slurp",
                        "YoudaoBot",
                        "Yahoo Slurp",
                        "MSNBot",
                        "Java (Often spam bot)",
                        "BaiDuSpider",
                        "Voila",
                        "Yandex bot",
                        "BSpider",
                        "twiceler",
                        "Sogou Spider",
                        "Speedy Spider",
                        "Google AdSense",
                        "Heritrix",
                        "Python-urllib",
                        "Alexa (IA Archiver)",
                        "Ask",
                        "Exabot",
                        "Custo",
                        "OutfoxBot/YodaoBot",
                        "yacy",
                        "SurveyBot",
                        "legs",
                        "lwp-trivial",
                        "Nutch",
                        "StackRambler",
                        "The web archive (IA Archiver)",
                        "Perl tool",
                        "MJ12bot",
                        "Netcraft",
                        "MSIECrawler",
                        "WGet tools",
                        "larbin",
                        "Fish search",
                );
                foreach($spiderSite as $val) {
                        $str = strtolower($val);
                        if (strpos($agent, $str) !== false) {
                                return true;
                        }
                }
        } else {
                return false;
        }
}

这个方法看起来和上一种类似,只是包含的搜索引擎更多。。



本文发布于 https://luojia.me

本站文章未经文下加注授权不得拷贝发布。

本博客使用Disqus评论系统,如果看不到评论框,请尝试爬墙。