0

我有一个网站项目,可以计算某些页面的浏览量。我将这些视图存储为 ip 地址和日期,因此我知道当用户在该页面上单击几次时,它只计算 1 次。

问题是,当他们访问我的网站时,我还希望消除搜索机器人计入真实用户的情况。

我通常在其他网站上通过将 IP 转换为真实地址,并将字符串与“google”等进行比较

但这有时需要 3-4 秒才能转换为真实地址,这使我的网站变慢。

我该如何解决这个问题?

更新

我研究了更多,我想出了这个简单的解决方案(根据你的答案)

$global_bots = array("bot", "slurp", "spider", "crawl", "archiver", "facebook");

// 上面的这个变量进入我的全局设置文件中,该文件包含在我的所有文件中

$user_agent = $_SERVER['HTTP_USER_AGENT'];

$bot_count = 0;
do{
    $pos = stripos($user_agent, $global_bots[$bot_count]);
    $bot_count++;
}while($pos===false && ( $bot_count < count($global_bots) ) );

if($pos!==false){
   //check if user already clicked today on this page, else record his ip
}else{
   //don't record it, it's mostly a BOT
}

如果您对此有任何其他更新,例如在机器人中发现的字符串,请随时快速回答。

谢谢。

4

2 回答 2

2

这不是“转换”(在涉及数学的意义上):它是对外部数据库(DNS 服务器)的查找。您应该使用与任何其他外部服务查找相同的规则:

  • 存储您获得的结果,这样您就不必再次查询。
  • 延迟任务,可能是命令行 cron 作业(访问者统计信息通常不需要实时处理)。

一旦你知道了这一点,我的谦虚建议是你不要这样做:

  • 你打算如何编译和维护一个像样的数据库?那里肯定有一百万个爬虫。
  • 您假设爬虫始终在具有公共 IP 地址的专用服务器上运行,这是不正确的。

区分机器人的常用(非排他性)方法是:

  • 用户代理字符串
  • 运行 JavaScript 的能力

您可能可以借用用户代理数据库(甚至是用户代理检测库)。

于 2013-04-28T19:14:30.010 回答
0

行为良好的机器人会首先请求 /robots.txt 路径,而人类通常根本不会请求它。因此,您可以通过查找首先请求此路径的用户代理来识别机器人。

于 2013-04-28T19:09:55.783 回答