2009-01-08 42 views
16

我正在为我的用户构建统计信息,并且不希望计算机器人的访问次数。如何使用php识别机器人?

现在我每次页面被调用时有一个基本的PHP与MySQL增加1。

但机器人也添加到计数。

有没有人可以想办法?

主要是只是主要的东西搞砸了。谷歌,雅虎,MSN等

回答

9

您应该按照用户代理字符串进行过滤。您可以在这里找到约300个常见用户代理的列表:http://www.robotstxt.org/db.html在运行SQL语句之前遍历该列表并忽略bot用户代理应该可以解决您的问题。

如果您不希望搜索引擎甚至到达页面,请使用基本的robots.txt文件来阻止它们。

0

您是否尝试过使用它们的用户代理信息识别他们?一个简单的谷歌搜索应该给你谷歌等使用的用户代理。

这当然不是万无一失的,但大多数公司的爬虫提供不同的用户代理。

编辑:假设你不想限制机器人访问,但只是不计算它在你的statistc访问。

2

在增加页面查看次数之前检查user agent,但请记住这可能是欺骗性的。 PHP公开用户代理$_SERVER['HTTP_USER_AGENT'],假设Web服务器为其提供此信息。有关$_SERVER的更多信息,请参阅http://www.php.net/manual/en/reserved.variables.server.php

你可以找到http://www.user-agents.org用户代理的列表;谷歌搜索也将提供属于主要提供者的名称。第三个可能的来源是你的Web服务器的访问日志,如果你可以聚合它们。

22

您可以检查用户代理字符串,空字符串或包含'robot','spider','crawler','curl'的字符串可能是机器人。

preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));

+6

非常有用。如果用** bot **替换** robot **以匹配其中一个最活跃的机器人,则更为有用:“Mozilla/5.0(兼容; Googlebot/2.1; + http://www.google.com/bot。 html)` – 2013-12-30 02:06:39

6

我们还有一类似用途的情况下给自己,并选择一个我们最近发现非常有帮助的是user-agent-string.infoUASParser class

这是一个PHP类拉最新的一组用户代理字符串的定义和本地缓存他们。该类可以配置为按照您认为合适的频率或罕见频率提取定义。像这样自动获取它们意味着您不必对bot用户代理或市场上的新用户进行各种更改,尽管您依赖UAS.info来准确执行此操作。

当这个类被调用时,它解析当前访问者的用户代理并返回一个关联数组来分解组成部分,例如,当UA被确定为有可能属于人类访客,在这种情况下,您可以更新您的统计

Array 
(
    [typ] => browser 
    [ua_family] => Firefox 
    [ua_name] => Firefox 3.0.8 
    [ua_url] => http://www.mozilla.org/products/firefox/ 
    [ua_company] => Mozilla Foundation 
    ........ 
    [os_company] => Microsoft Corporation. 
    [os_company_url] => http://www.microsoft.com/ 
    [os_icon] => windowsxp.png 
) 

typ设置为browser。需要注意的地方

夫妇在这里:

  • 你依靠UAS.info用于提供准确且最新
  • 搜索引擎谷歌和雅虎宣布自己在用户代理字符串自己用户代理字符串,但是这种方法仍然会计算假装为人类访问者的机器人的访问(发送欺骗性UA)
  • 由于上面提到的@amdfan,通过robots.txt拦截机器人应阻止大多数人访问您的页面。如果您需要将内容编入索引但不增加统计信息,那么robots.txt方法将不是一个现实的选项