首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将IP转换为地址需要花费太多时间。

将IP转换为地址需要花费太多时间。
EN

Stack Overflow用户
提问于 2013-04-28 19:02:53
回答 2查看 76关注 0票数 0

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

问题是,当搜索机器人访问我的网站时,我也想从真正的用户中删除搜索机器人。

我通常在其他站点上这样做,方法是将IP转换为真实地址,并与字符串“google”等进行比较。

但有时需要3-4秒才能转换成真正的地址,这使得我的网站速度变慢了。

我如何处理这个问题呢?

更新

我做了更多的研究,我想出了这个简单的解决方案(基于你的答案)。

代码语言:javascript
复制
$global_bots = array("bot", "slurp", "spider", "crawl", "archiver", "facebook");

//此变量位于我的全局设置文件中,该文件包含在我的所有文件中。

代码语言:javascript
复制
$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
}

如果您对此有任何其他更新,如在机器人中找到字符串,请随意跳入其中,并提供快速答案。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-04-28 19:14:30

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

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

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

  • 您打算如何编译和维护一个像样的数据库?外面肯定有上百万爬虫。
  • 您假设爬虫总是运行在具有公共IP地址的专用服务器上,这是错误的。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-04-28 19:09:55

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16266590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档