如何识别客户端是搜索机器人?

问题描述:

我已经建立了我的整个网站使用AJAX(的确是GWT)。我还实施了Google提出的AJAX抓取。然而,在实施之后,我发现雅虎,Bing和百度都没有实施该计划!如何识别客户端是搜索机器人?

我想知道是否有一种方法来识别Web客户端是一个搜索机器人。如果是,他们会显示我创建的HTML快照。

这将是最好的,如果我能在APACHE级别识别它们,那么我可以做一个mod_rewrite。但是,如果我可以在PHP或GWT中完成,那还是可以的。

要做到这一点使用Apache,您可以使用rewriteRule以及RewriteCond,%{HTTP_USER_AGENT}

RewriteCond接受RegExp,所以你必须在那里使用一个模式,它匹配所有这些机器人(你应该找到如何在由acme链接的页面上构建模式的信息)。

但要小心:搜索引擎可能会惩罚向僵尸程序和其他客户端传递不同内容的页面。

这是非常棘手的,因为有这么多不同的搜索引擎。我想这不能在一个班轮中完成。如果PHP没问题,我建议使用php_browscap.ini(可用于不同的语言)。例如,这可以与P HPs get_browser()-function一起使用。

然后,你可以检查所有不同的浏览器的东西,当然机器人。

在我自己的代码片段我使用下面的函数(基于提到browscap),以获得相应的相关信息容易在我的代码:

function _browser($a_browser = false, $a_version = false, $name = false) 
{ 
$browser_list = 'msie firefox konqueror safari netscape navigator opera mosaic lynx amaya omniweb chrome avant camino flock seamonkey aol mozilla gecko'; 
$user_browser = strtolower($_SERVER['HTTP_USER_AGENT']); 
$this_version = $this_browser = ''; 

$browser_limit = strlen($user_browser); 
foreach ($this->_w($browser_list) as $row) 
{ 
    $row = ($a_browser !== false) ? $a_browser : $row; 
    $n = stristr($user_browser, $row); 
    if (!$n || !empty($this_browser)) continue; 

    $this_browser = $row; 
    $j = strpos($user_browser, $row) + strlen($row) + 1; 
    for (; $j <= $browser_limit; $j++) 
    { 
     $s = trim(substr($user_browser, $j, 1)); 
     $this_version .= $s; 

     if ($s === '') break; 
    } 
} 

if ($a_browser !== false) 
{ 
    $ret = false; 
    if (strtolower($a_browser) == $this_browser) 
    { 
     $ret = true; 

     if ($a_version !== false && !empty($this_version)) 
     { 
      $a_sign = explode(' ', $a_version); 
      if (version_compare($this_version, $a_sign[1], $a_sign[0]) === false) 
      { 
       $ret = false; 
      } 
     } 
    } 

    return $ret; 
} 

// 
$this_platform = ''; 
if (strpos($user_browser, 'linux')) 
{ 
    $this_platform = 'linux'; 
} 
elseif (strpos($user_browser, 'macintosh') || strpos($user_browser, 'mac platform x')) 
{ 
    $this_platform = 'mac'; 
} 
else if (strpos($user_browser, 'windows') || strpos($user_browser, 'win32')) 
{ 
    $this_platform = 'windows'; 
} 

if ($name !== false) 
{ 
    return $this_browser . ' ' . $this_version; 
} 

return array(
    "browser"  => $this_browser, 
    "version"  => $this_version, 
    "platform"  => $this_platform, 
    "useragent" => $user_browser 
); 
} 

function _w($a = '') 
{ 
    if (empty($a)) return array(); 

    return explode(' ', $a); 
} 

例子:

/* 
// Examples 

echo '<pre>'; 
print_r(_browser()); // return array of browser data 

var_dump(_browser('firefox')); // return true if using firefox 
var_dump(_browser('msie', '>= 7.0')); // return true if using IE 7.0 or above else false 
var_dump(_browser('firefox', '< 3.0.5')); // return true if using below firefox 3.0.5 (can check minor version) 
var_dump(_browser(false, false, true)); // return string of name of browser and version 

// To check if Gecko browser is used 
var_dump(_browser('gecko')); 

// version_compared function is used so you can use the same operator syntax 
var_dump(_browser('firefox', 'le 1.5')); 

echo '</pre>'; 

如果你使用PHP,你可以检查$_SERVER['HTTP_USER_AGENT']对搜索引擎的用户代理字符串的字符串 - 一些细节在这里找到:http://en.wikipedia.org/wiki/Web_crawler

您也可以使用Firefox插件,看看搜索引擎会怎么看你的页面:http://chrispederick.com/work/user-agent-switcher/

+0

你也可以使用这个http://www.useragentstring.com/pages/Crawlerlist/ – Rahly 2010-12-01 10:37:40