防止抓取工具读取下划线模板

时间:2015-07-20 22:54:56

标签: templates web-crawler underscore.js robots.txt

我需要一个robots.txt Disallow规则,阻止抓取工具跟踪<script type="text/template">标记中的模板标记。

抓取时,我看到的网址错误如下:

404 GET /foo/bar/<%=%20 getPublicUrl %20%

E.g。

<script type="text/template">
  <a href="<%= my_var %>" target="_blank">Test</a>
</script>

被以下内容阻止:

Disallow: <%*%>

有什么想法吗?

我注意到它似乎发生在target="_blank"的锚点上。不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

这有点棘手。

许多抓取工具(包括Google)会在对robots.txt进行检查之前,对网址中的任何不安全字符进行静默URL编码。这意味着您必须阻止编码版本。

例如,如果网址为:

http://example.com/foo/bar/<% my_var %>

Google实际检查robots.txt的网址为:

http://example.com/foo/bar/%3C%%20my_var%20%%3E

空格和尖括号是静默URL编码的。所以你需要像这样阻止它:

User-agent: *
Disallow: */%3C%*%%3E

如果你试图像这样阻止它:

# Does not work:
User-agent: *
Disallow: */<%*%>

然后什么都不会被阻止,因为它正在比较&#34;&lt;&#34;和&#34;&gt;&#34;到&#34;%3C&#34;和&#34;%3E&#34;。

我已经确认以上适用于Google,但YMMV适用于其他抓取工具。另请注意,有些爬虫根本不支持通配符。