机器人解释脚本标签

时间:2013-07-02 12:27:53

标签: web-applications web-crawler robots.txt

我们的网络应用程序目前被众多机器人抓取。 但是,他们中的一些似乎试图解析javascript标签并将其中的一些解释为链接,这些链接被调用并用404的负载填充我们的错误日志。

在我们的网页上,我们有跟踪脚本,如Google Analytics或Piwik,如下所示:

//the line below seems to be interpreted (1)
<script type="text/javascript">
  var _gaq = _gaq || [];
    _gaq.push(['_setAccount', '<account id>']);
    //the line below seems to be interpreted (2)
    _gaq.push(['_gat._anonymizeIp']);
    _gaq.push(['_trackPageview']);

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        //the line below seems to be interpreted (3)
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>

因此,当某些机器人抓取我们的网站时(假设mydomain.com/application/index.html),我们会收到类似网址的请求(取决于机器人):

  • mydomain.com/application/text/javascript(1)
  • mydomain.com/application/_gat._anonymizeIp(2)
  • mydomain.com/application/('https:(3)

我无法确定是否已解释上述所有行或其他行,但某些部分(例如_gat._anonymizeIp)仅在页面源中出现一次,因此很可能是机器人占用那些界限中的“相对联系”。

从这些机器人的描述来看,它们似乎并不是恶意的,因此应该遵守robots.txt等中的指令。

但是,AFAIK只能使用robots.txt或元标记来允许/禁止整个页面。这是正确的还是有某种方法可以排除页面的某些部分进行抓取?

如果没有,可以采取哪些措施来阻止标准机器人解释这些脚本?

作为旁注:似乎有几个独立的机器人,因此处理每一个机器人都不是一个选择。除此之外,我们的客户不希望完全排除其中一些机器人。

添加信息

似乎所有机器人的操作员都声称他们的机器人服从robots.txt(我没有全部检查)。

此外,并非每个字符串文字都被解释(例如,没有.../_trackPageview个请求。)

此外,其中一些机器人似乎寻找相同类型的信息(在这种情况下提供工作机会),因此可能会有一些共同的源代码。

所以我怀疑解析器中的一些错误是无法识别脚本标记或者无法正确解析它们。

因此,我们尝试将脚本包装在旧式注释(<!-- ... //-->)中,这可能会导致机器人忽略整个脚本。使用这些评论应该是安全的,不应该吗?

1 个答案:

答案 0 :(得分:0)

Robots.txt只能阻止整个页面。没有办法阻止页面的一部分。

您可以尝试将JavaScript移动到文件中,然后使用robots.txt来阻止JavaScript文件。如果机器人确实服从robots.txt,这可能会有效。

我的猜测是机器人可能不服从robots.txt。只有礼貌,表现良好的机器人才能服从robots.txt。将JS中的每个字符串文字解释为URL并不是我所谓的礼貌行为。如果不支持robots.txt,则必须通过IP阻止每个机器人,或者只是忍受404错误。