我希望推出自己的简单网络统计脚本.
据我所知,道路上唯一的主要障碍是告诉人类游客除机器人之外.我想有一个解决方案,我不需要定期维护(即我不想用机器人相关的用户代理更新文本文件).
是否有任何开放服务可以做到这一点,就像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下载程序.过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并看看这些方法似乎有多强烈地用于识别我们知道的机器人.
人类和机器人会做类似的事情,但机器人会做人类没有做的事情.让我们试着找出那些东西.在我们看一下行为之前,让我们接受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下载程序.过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并看看这些方法似乎有多强烈地用于识别我们知道的机器人.
最简单的方法是检查他们的使用者是否包含"机器人"或"蜘蛛".大部分都是.
编辑(10年后): 正如Lukas在评论框中所说的,今天几乎所有的爬虫都支持javascript,所以我删除了段落,声明如果该站点是基于JS的,那么大多数机器人都会被自动删除.
您可以按照机器人列表并将其用户代理添加到过滤列表中.
看看这个机器人列表.
这个用户代理列表也很不错.只需删除所有的B,然后就可以了.
编辑:由eSniff完成的惊人工作在这里有上面的列表 " 在一个可以查询和解析更容易的形式.robotstxt.org/db/all.txt每个新的Bot由机器人ID:XXX定义.你应该能够每周下载一次并将其解析为您的脚本可以使用的内容 "就像您可以阅读他的评论一样.
希望能帮助到你!
考虑一个伪造为CSS背景图像的PHP stats脚本(给出正确的响应头 - 至少是内容类型和缓存控件 - 但是写出一个空图像).
一些机器人解析JS,但肯定没有人加载CSS图像.与JS一样的一个缺陷是,您将排除基于文本的浏览器,但这不到全球网络人口的1%.此外,与禁用JS的客户端(手机!)相比,CSS禁用客户端肯定更少.
为了使更加先进的机器人(谷歌,雅虎等)可能在将来抓取它们的(普通)情况更加坚实,不允许通往CSS图像的路径robots.txt
(无论如何,更好的机器人会尊重它).
我使用以下内容作为我的统计/计数器应用程序:
我删除了原始代码源的链接,因为它现在重定向到食品应用程序.