Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web applications 解释脚本标记的机器人_Web Applications_Web Crawler_Robots.txt - Fatal编程技术网

Web applications 解释脚本标记的机器人

Web applications 解释脚本标记的机器人,web-applications,web-crawler,robots.txt,Web Applications,Web Crawler,Robots.txt,我们的web应用程序目前由许多机器人进行爬网。 然而,他们中的一些人似乎试图解析javascript标记,并将其中的一些解释为链接,这些链接被调用并用404的负载填充我们的错误日志 在我们的页面上,我们有跟踪脚本,如Google Analytics或Piwik,如下所示: //the line below seems to be interpreted (1) <script type="text/javascript"> var _gaq = _gaq || []; _

我们的web应用程序目前由许多机器人进行爬网。 然而,他们中的一些人似乎试图解析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>
//下面这一行似乎被解释为(1)
var _gaq=_gaq | |[];
_gaq.push([''设置帐户','');
//下面这一行似乎被解释为(2)
_gaq.push([''u gat.'u namonizeip']);
_gaq.push([''u trackPageview']);
(功能(){
var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;
//下面这一行似乎被解释为(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);
})();
因此,当一些机器人抓取我们的站点时(比如说
mydomain.com/application/index.html
),我们会收到如下URL请求(取决于机器人):

  • mydomain.com/application/text/javascript
    (1)
  • mydomain.com/application/\u gat.\u anonymizeIp
    (2)
  • mydomain.com/application/('https:
    (3)
我不能确定上面的所有行是否都被解释过,或者其他行是否被解释过,但某些部分(例如,
\u gat.\u namonizeip
)在页面源代码中只出现一次,因此机器人很可能从这些行中获取这些“相对链接”

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

但是,AFAIK one只能允许/禁止使用robots.txt或meta标记的整个页面。这是正确的还是有什么方法可以排除页面的部分内容

如果没有,可以采取什么措施防止标准机器人解释这些脚本

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

附加信息

似乎所有机器人的操作员都声明他们的机器人遵守robots.txt(我没有全部检查)

此外,并非每个字符串文字都可以解释(例如,没有
../\u trackPageview
请求)

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

因此,我怀疑解析器中会出现一些错误,无法识别脚本标记或无法正确解析它们


因此,我们试图用老式的注释(
)包装脚本,这可能会导致机器人忽略整个脚本。在这里使用这些注释应该是安全的,不是吗?

robots.txt只能阻止整个页面。无法只阻止部分页面

您可以尝试将JavaScript移动到一个文件中,然后使用robots.txt仅阻止JavaScript文件。如果robot确实遵守robots.txt,这可能会起作用


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

谢谢大家的支持nt,我会调查的。机器人的操作员声明他们遵守robots.txt,从他们的声誉来看,我猜他们说的是实话。我会在我的问题中补充这一点。