Web applications 解释脚本标记的机器人
我们的web应用程序目前由许多机器人进行爬网。 然而,他们中的一些人似乎试图解析javascript标记,并将其中的一些解释为链接,这些链接被调用并用404的负载填充我们的错误日志 在我们的页面上,我们有跟踪脚本,如Google Analytics或Piwik,如下所示: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 || []; _
//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请求(取决于机器人):
(1)mydomain.com/application/text/javascript
(2)mydomain.com/application/\u gat.\u anonymizeIp
(3)mydomain.com/application/('https:
\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,从他们的声誉来看,我猜他们说的是实话。我会在我的问题中补充这一点。