0

我们的网络应用程序目前被大量机器人抓取。但是,其中一些似乎尝试解析 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请求)。

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

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

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

4

1 回答 1

0

Robots.txt 只能阻止整个页面。无法仅阻止页面的一部分。

您可以尝试将 JavaScript 移动到文件中,然后使用 robots.txt 仅阻止 JavaScript 文件。如果机器人真的遵守 robots.txt,这可能会奏效。

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

于 2013-07-02T18:51:37.403 回答