切换抓取工具和访客访问者的链接

时间:2015-07-05 13:39:29

标签: php html css

我需要为抓取工具和访客显示两个不同的链接。例如:
抓取工具查看正常链接 - <a href="example.com">example.com</a>
访客请参阅链接 - <a href="other.com/register">Register to see link</a>

// Check the user agent of the current 'visitor'
if($Detect->isCrawler()) {
    // true if crawler user agent detected
}else{
    // false
}

2 个答案:

答案 0 :(得分:1)

在大多数情况下,您可以通过查看“用户代理”来确定您的网站是否正在被抓取。头:

function isWebCrawler() {
  $isCrawler = false;

  $userAgent = $_SERVER['HTTP_USER_AGENT'];
  if(strlen(strstr($userAgent, "Google")) <= 0 ) {
    $isCrawler = true;
  }

  return $isCrawler;
}

以下是大多数主要机器人的用户代理字符串列表: List of Web Crawler User Agents

答案 1 :(得分:1)

使用robots.txt阻止
不幸的是,没有一个真正的傻瓜证明系统来检测机器人。使用robots.txt文件,将允许您阻止大多数合法的机器人。但是,有很多更具“侵略性”的机器人会忽略这个文件。此外,您的问题是检测它们而不是阻止它们。

使用用户代理检测
因此,检测机器人的第二种最佳方法是使用$_SERVER['HTTP_USER_AGENT']检查用户代理。例如:

function isCrawler($agent)
{
    $crawlers = array(
        array('Google', 'Google'),
        array('msnbot', 'MSN'),
        array('Rambler', 'Rambler'),
        array('Yahoo', 'Yahoo'),
        array('AbachoBOT', 'AbachoBOT'),
        array('accoona', 'Accoona'),
        array('AcoiRobot', 'AcoiRobot'),
        array('ASPSeek', 'ASPSeek'),
        array('CrocCrawler', 'CrocCrawler'),
        array('Dumbot', 'Dumbot'),
        array('FAST-WebCrawler', 'FAST-WebCrawler'),
        array('GeonaBot', 'GeonaBot'),
        array('Gigabot', 'Gigabot'),
        array('Lycos', 'Lycos spider'),
        array('MSRBOT', 'MSRBOT'),
        array('Scooter', 'Altavista robot'),
        array('AltaVista', 'Altavista robot'),
        array('IDBot', 'ID-Search Bot'),
        array('eStyle', 'eStyle Bot'),
        array('Scrubby', 'Scrubby robot')
    );

    foreach ($crawlers as $c)
    {
        if (stristr($agent, $c[0]))
        {
            return($c[1]);
        }
    }

    return false;
}

$crawler = isCrawler($_SERVER['HTTP_USER_AGENT']);

使用外部资源提高可靠性
但是,那里有很多机器人,你的阵列会变得非常大,以便抓住它们。更不用说它会过时了。因此,使用更新批次的外部资源更可靠。网站UserAgentString.com正在提供此类服务。像这样的简单代码可以帮到你:

$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER['HTTP_USER_AGENT'])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler"){
    echo '<a href="example.com">example.com</a>';
} else {
    echo '<a href="other.com/register">Register to see link</a>';
}

对此问题的信任:How to identify web-crawler?