当前位置:  开发笔记 > 编程语言 > 正文

告诉机器人除了人类访问者的统计数据?

如何解决《告诉机器人除了人类访问者的统计数据?》经验,为你挑选了5个好方法。

我希望推出自己的简单网络统计脚本.

据我所知,道路上唯一的主要障碍是告诉人类游客除机器人之外.我想有一个解决方案,我不需要定期维护(即我不想用机器人相关的用户代理更新文本文件).

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

澄清:我不打算阻止机器人.我不需要100%不漏水的结果.我只想从我的统计数据中尽可能多地排除.知道解析user-Agent是一个选项,但维护要解析的模式是很多工作.我的问题是,是否有任何项目或服务已经这样做.

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

Jeff Ferland.. 72

人类和机器人会做类似的事情,但机器人会做人类没有做的事情.让我们试着找出那些东西.在我们看一下行为之前,让我们接受RayQuang的评论是有用的.如果访问者拥有机器人的用户代理字符串,那么它可能是一个机器人.除非他们正在努力破坏某些东西,否则我无法想象任何人使用"Google Crawler"(或类似的东西)作为UA.我知道你不想手动更新列表,但是自动提取一个列表应该是好的,即使它在接下来的10年里保持陈旧,它也会有所帮助.

有些人已经提到了Javascript和图片加载,但Google会同时做到这两点.我们必须假设现在有几个机器人会同时做这两个,所以这些不再是人类指标.然而,机器人仍将独一无二地遵循"隐形"链接.以非常偷偷摸摸的方式链接到页面,我无法将其视为用户.如果这样,我们有一个机器人.

机器人通常会(尽管不总是)尊重robots.txt.用户不关心robots.txt,我们可以假设任何检索robots.txt的人都是机器人.不过,我们可以更进一步,将虚拟CSS页面链接到robots.txt排除的页面.如果加载我们正常的CSS但我们的虚拟CSS不是,它肯定是一个机器人.你必须通过IP构建(可能是内存中)负载表并且不包含在匹配中,但这应该是一个非常可靠的告诉.

因此,要使用所有这些:通过ip地址维护一个机器人数据库表,可能有时间戳限制.添加任何跟随隐形链接的内容,添加任何加载"真实"CSS但忽略robots.txt CSS的内容.也许添加所有robots.txt下载程序.过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并看看这些方法似乎有多强烈地用于识别我们知道的机器人.



1> Jeff Ferland..:

人类和机器人会做类似的事情,但机器人会做人类没有做的事情.让我们试着找出那些东西.在我们看一下行为之前,让我们接受RayQuang的评论是有用的.如果访问者拥有机器人的用户代理字符串,那么它可能是一个机器人.除非他们正在努力破坏某些东西,否则我无法想象任何人使用"Google Crawler"(或类似的东西)作为UA.我知道你不想手动更新列表,但是自动提取一个列表应该是好的,即使它在接下来的10年里保持陈旧,它也会有所帮助.

有些人已经提到了Javascript和图片加载,但Google会同时做到这两点.我们必须假设现在有几个机器人会同时做这两个,所以这些不再是人类指标.然而,机器人仍将独一无二地遵循"隐形"链接.以非常偷偷摸摸的方式链接到页面,我无法将其视为用户.如果这样,我们有一个机器人.

机器人通常会(尽管不总是)尊重robots.txt.用户不关心robots.txt,我们可以假设任何检索robots.txt的人都是机器人.不过,我们可以更进一步,将虚拟CSS页面链接到robots.txt排除的页面.如果加载我们正常的CSS但我们的虚拟CSS不是,它肯定是一个机器人.你必须通过IP构建(可能是内存中)负载表并且不包含在匹配中,但这应该是一个非常可靠的告诉.

因此,要使用所有这些:通过ip地址维护一个机器人数据库表,可能有时间戳限制.添加任何跟随隐形链接的内容,添加任何加载"真实"CSS但忽略robots.txt CSS的内容.也许添加所有robots.txt下载程序.过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并看看这些方法似乎有多强烈地用于识别我们知道的机器人.


这是我读过的最好的回应之一.
@JeffFerland在大规模NSA间谍活动时,我们需要信任的站点,根本不保存IP

2> Yacoby..:

最简单的方法是检查他们的使用者是否包含"机器人"或"蜘蛛".大部分都是.


合法的那样做.坏的(例如,电子邮件收集者)将从Web浏览器劫持一个useragent字符串.

3> Frankie..:

编辑(10年后): 正如Lukas在评论框中所说的,今天几乎所有的爬虫都支持javascript,所以我删除了段落,声明如果该站点是基于JS的,那么大多数机器人都会被自动删除.

您可以按照机器人列表并将其用户代理添加到过滤列表中.

看看这个机器人列表.

这个用户代理列表也很不错.只需删除所有的B,然后就可以了.

编辑:由eSniff完成的惊人工作在这里有上面的列表 " 在一个可以查询和解析更容易的形式.robotstxt.org/db/all.txt每个新的Bot由机器人ID:XXX定义.你应该能够每周下载一次并将其解析为您的脚本可以使用的内容 "就像您可以阅读他的评论一样.

希望能帮助到你!


NoScript也意味着,没有StackOverflow,没有Gmail,阅读器,地图,Facebook,YouTube等......我一直使用NoScript来检查我自己的网站上的蜘蛛和机器人,但现在使用NoScript没有多大意义.只是我的观点.
@col.这就像杰夫所说的那样,总是试着少喝一点......昨天重新阅读它,虽然逗号会让它更容易阅读!:)
我想知道是什么让你编辑这个旧答案.
@col.弹片:哈哈他刚加了一个逗号.

4> BalusC..:

考虑一个伪造为CSS背景图像的PHP stats脚本(给出正确的响应头 - 至少是内容类型和缓存控件 - 但是写出一个空图像).

一些机器人解析JS,但肯定没有人加载CSS图像.与JS一样的一个缺陷是,您将排除基于文本的浏览器,但这不到全球网络人口的1%.此外,与禁用JS的客户端(手机!)相比,CSS禁用客户端肯定更少.

为了使更加先进的机器人(谷歌,雅虎等)可能在将来抓取它们的(普通)情况更加坚实,不允许通往CSS图像的路径robots.txt(无论如何,更好的机器人会尊重它).


一个好主意......直到每个人都这样做.:)

5> chimeraha..:

我使用以下内容作为我的统计/计数器应用程序:


我删除了原始代码源的链接,因为它现在重定向到食品应用程序.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有