将机器人与人类访问者区分开来以获取统计数据?

2022-08-30 09:50:17

我希望滚动我自己的简单Web统计脚本。

据我所知,路上唯一的主要障碍是将人类游客与机器人区分开来。我希望有一个解决方案,我不需要定期维护(即我不想使用与机器人相关的用户代理更新文本文件)。

是否有任何开放服务可以做到这一点,就像Akismet对垃圾邮件所做的那样?或者是否有一个PHP项目致力于识别蜘蛛和机器人并提供频繁更新?

澄清:我不想阻止机器人。我不需要100%的防水效果。我只想从我的统计数据中排除尽可能多的东西。要知道解析用户代理是一种选择,但维护要解析的模式是很多工作。我的问题是,是否有任何项目或服务已经做到了这一点。

赏金:我想我会把这个作为这个话题的参考问题。最佳/最原始/技术上最可行的贡献将获得赏金金额。


答案 1

人类和机器人会做类似的事情,但机器人会做人类不会做的事情。让我们尝试识别这些东西。在我们查看行为之前,让我们接受RayQuang的评论是有用的。如果访问者具有机器人的用户代理字符串,则它可能是机器人。我不能把任何人用“Google Crawler”(或类似的东西)想象成UA,除非他们正在努力打破一些东西。我知道你不想手动更新列表,但自动拉取那个列表应该很好,即使它在接下来的10年里保持陈旧,它也会有所帮助。

有些人已经提到了Javascript和图像加载,但Google会同时做这两件事。我们必须假设现在有几个机器人可以同时做这两件事,所以这些不再是人类的指标。然而,机器人仍然会唯一地做的是遵循“不可见”的链接。以一种非常狡猾的方式链接到一个页面,我作为用户无法看到。如果遵循这一点,我们就有一个机器人。

机器人通常会(尽管并非总是)尊重机器人.txt。用户不关心机器人.txt,我们可以假设任何检索机器人的人.txt都是机器人。不过,我们可以更进一步,将一个虚拟的CSS页面链接到我们被机器人排除的页面.txt。如果我们的正常CSS被加载,但我们的虚拟CSS没有加载,它绝对是一个机器人。您必须按IP构建(可能是内存中)加载表,并执行未包含在匹配中的表,但这应该是一个非常可靠的信息。

因此,为了使用所有这些:按IP地址维护机器人的数据库表,可能具有时间戳限制。添加任何跟随你的隐形链接的东西,添加任何加载“真实”CSS但忽略机器人.txt CSS的东西。也许添加所有机器人.txt下载器。过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并查看这些方法在识别我们知道是机器人的东西方面似乎有多强。


答案 2

最简单的方法是检查他们的用户代理是否包含“bot”或“spider”。大多数都有