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

Pek*_*ica 56 javascript php analytics web-services

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

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

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

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

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

Jef*_*and 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下载程序.过滤用户代理字符串作为最后一步,并考虑使用它来进行快速统计分析,并看看这些方法似乎有多强烈地用于识别我们知道的机器人.

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

Yac*_*oby 21

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

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

Fra*_*kie 13

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

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

看看这个机器人列表.

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

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

希望能帮助到你!

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

Bal*_*usC 11

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

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

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

  • 一个好主意......直到每个人都这样做.:) (2认同)

chi*_*aha 6

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

<?php
    function is_bot($user_agent) {
        return preg_match('/(abot|dbot|ebot|hbot|kbot|lbot|mbot|nbot|obot|pbot|rbot|sbot|tbot|vbot|ybot|zbot|bot\.|bot\/|_bot|\.bot|\/bot|\-bot|\:bot|\(bot|crawl|slurp|spider|seek|accoona|acoon|adressendeutschland|ah\-ha\.com|ahoy|altavista|ananzi|anthill|appie|arachnophilia|arale|araneo|aranha|architext|aretha|arks|asterias|atlocal|atn|atomz|augurfind|backrub|bannana_bot|baypup|bdfetch|big brother|biglotron|bjaaland|blackwidow|blaiz|blog|blo\.|bloodhound|boitho|booch|bradley|butterfly|calif|cassandra|ccubee|cfetch|charlotte|churl|cienciaficcion|cmc|collective|comagent|combine|computingsite|csci|curl|cusco|daumoa|deepindex|delorie|depspid|deweb|die blinde kuh|digger|ditto|dmoz|docomo|download express|dtaagent|dwcp|ebiness|ebingbong|e\-collector|ejupiter|emacs\-w3 search engine|esther|evliya celebi|ezresult|falcon|felix ide|ferret|fetchrover|fido|findlinks|fireball|fish search|fouineur|funnelweb|gazz|gcreep|genieknows|getterroboplus|geturl|glx|goforit|golem|grabber|grapnel|gralon|griffon|gromit|grub|gulliver|hamahakki|harvest|havindex|helix|heritrix|hku www octopus|homerweb|htdig|html index|html_analyzer|htmlgobble|hubater|hyper\-decontextualizer|ia_archiver|ibm_planetwide|ichiro|iconsurf|iltrovatore|image\.kapsi\.net|imagelock|incywincy|indexer|infobee|informant|ingrid|inktomisearch\.com|inspector web|intelliagent|internet shinchakubin|ip3000|iron33|israeli\-search|ivia|jack|jakarta|javabee|jetbot|jumpstation|katipo|kdd\-explorer|kilroy|knowledge|kototoi|kretrieve|labelgrabber|lachesis|larbin|legs|libwww|linkalarm|link validator|linkscan|lockon|lwp|lycos|magpie|mantraagent|mapoftheinternet|marvin\/|mattie|mediafox|mediapartners|mercator|merzscope|microsoft url control|minirank|miva|mj12|mnogosearch|moget|monster|moose|motor|multitext|muncher|muscatferret|mwd\.search|myweb|najdi|nameprotect|nationaldirectory|nazilla|ncsa beta|nec\-meshexplorer|nederland\.zoek|netcarta webmap engine|netmechanic|netresearchserver|netscoop|newscan\-online|nhse|nokia6682\/|nomad|noyona|nutch|nzexplorer|objectssearch|occam|omni|open text|openfind|openintelligencedata|orb search|osis\-project|pack rat|pageboy|pagebull|page_verifier|panscient|parasite|partnersite|patric|pear\.|pegasus|peregrinator|pgp key agent|phantom|phpdig|picosearch|piltdownman|pimptrain|pinpoint|pioneer|piranha|plumtreewebaccessor|pogodak|poirot|pompos|poppelsdorf|poppi|popular iconoclast|psycheclone|publisher|python|rambler|raven search|roach|road runner|roadhouse|robbie|robofox|robozilla|rules|salty|sbider|scooter|scoutjet|scrubby|search\.|searchprocess|semanticdiscovery|senrigan|sg\-scout|shai\'hulud|shark|shopwiki|sidewinder|sift|silk|simmany|site searcher|site valet|sitetech\-rover|skymob\.com|sleek|smartwit|sna\-|snappy|snooper|sohu|speedfind|sphere|sphider|spinner|spyder|steeler\/|suke|suntek|supersnooper|surfnomore|sven|sygol|szukacz|tach black widow|tarantula|templeton|\/teoma|t\-h\-u\-n\-d\-e\-r\-s\-t\-o\-n\-e|theophrastus|titan|titin|tkwww|toutatis|t\-rex|tutorgig|twiceler|twisted|ucsd|udmsearch|url check|updated|vagabondo|valkyrie|verticrawl|victoria|vision\-search|volcano|voyager\/|voyager\-hc|w3c_validator|w3m2|w3mir|walker|wallpaper|wanderer|wauuu|wavefire|web core|web hopper|web wombat|webbandit|webcatcher|webcopy|webfoot|weblayers|weblinker|weblog monitor|webmirror|webmonkey|webquest|webreaper|websitepulse|websnarf|webstolperer|webvac|webwalk|webwatch|webwombat|webzinger|wget|whizbang|whowhere|wild ferret|worldlight|wwwc|wwwster|xenu|xget|xift|xirq|yandex|yanga|yeti|yodao|zao\/|zippp|zyborg|\.\.\.\.)/i', $user_agent);
    }

    //example usage
    if (! is_bot($_SERVER["HTTP_USER_AGENT"])) echo "it's a human hit!";
?>
Run Code Online (Sandbox Code Playgroud)

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


Teh*_*ike 5

检查用户代理会提醒您注意诚实的机器人,但不会提醒垃圾邮件发送者。

要判断哪些请求是由不诚实的机器人发出的,最好的办法(基于此人的有趣研究)是捕获 Javascript 焦点事件

如果 focus 事件触发,则页面几乎肯定是由人加载的。