怎么写robots.txt
天下维客,你可以修改的网络知识库
| robots.txt综述 | 怎么写robots.txt | robots.txt语法规范 | 文件实例 | 常见错误 | 扩展功能 |
| robots.txt疑难解答 | 检测工具 | 禁止收录特定页面 | 清除已收录的页面 | META标签:robots | |
| nofollow | noindex | .htaccess | 网络爬虫的名称 | 常见爬虫的特性 | robots.txt相关链接 |
robots.txt即The Robots Exclusion Protocol(机器人排除协议),用于告诉搜索引擎的漫游器(又称网络蜘蛛)哪些网站内容不能被抓取。
robots.txt的作用和局限请参见robots.txt一文,而本文将介绍robots.txt的具体写法。
目录 |
常用的robots.txt实例
允许任何爬虫访问整个网站
User-agent:* Disallow:
本例允许所有的爬虫访问网站的任何目录、任何文件。这个效果与网站不存在/robots.txt文件时相同,但为了网站的正规起见,建议您建立如上的robots.txt。
注:如果robots.txt中含有其他限制条件,不要与本例组合使用
禁止所有蜘蛛爬行任何文件
User-agent: * Disallow: /
本例阻止所有爬虫对任何内容的爬行。如果你的网站还未正式开放,可以使用这个例子。
禁止特定爬虫访问
限制特定的爬虫程序时,需要给出爬虫的名字。(爬虫的名称请参见常见网络爬虫的名称)
禁止特定爬虫访问全站任何内容
例如禁止google爬虫的访问,则在User-agent里面指明其爬虫名称Googlebot
User-agent: Googlebot Disallow: /
禁止特定蜘蛛访问特定目录或具体文件
在Disallow命令中给出限定目录或文件名即可,每行Disallow中只能写一个目录名或文件名,可以多行联用
User-agent: Googlebot Disallow: /private/ Disallow: /allwiki/xxx.htm
限制多个特定蜘蛛访问的例子
例如禁止google和yahoo爬虫的访问,可以用两组命令来控制。
User-agent: googlebot Disallow: /cgi-bin/ User-agent:yahoo slurp Disallow: /allwiki/ Disallow: /tmp/
一个比较复杂的例子
由于例子较长,单独写在robots.txt文件实例中。
robots.txt的语法
基本语法
robots.txt的主体部分由一组或多组如下代码组成:
# 注释行,robots.txt DEMO, by www.allwiki.com User-agent: 爬虫名称 Disallow: 网址限制条件
- 大小写敏感性:robots.txt是大小写敏感的,尤其应该注意网址的大小写拼写。(虽然有很多搜索引擎允许网址之外的内容为大小写无关,而由于缺乏强制标准、且实际上存在大小写敏感现象,所以建议统一认为大小写敏感)。
- User-agent命令:指定爬虫名称(注:"*"通配符扩展另见下一段落的专门说明)。
- 每组限制条件中应仅有一个User-agent指定
- 爬虫名称可从其所有者网站查到。也可以参见常见网络爬虫的名称一文。
- Disallow命令:指定网址限制条件
- 每组限制条件中,可以有多行Disallow命令(这些Disallow命令之间不要空行)
- 网址限定条件是指目录或文件的起始字串(注:"*"通配符扩展另见下一段落的专门说明),举例如下:
Disallow: /tmp
- 以上的例子可以匹配/tmp/abc.php、/tmpfile.html等。如果是“Disallow: /tmp/”则不会匹配/tmpfile.html。
- 注意:不支持中文或%编码、特殊字符!中文存在多种编码,%可能导致字符转义,因此不要在网址限制条件中出现。例如“/tmp%2f”就存在二义性(可能被有些蜘蛛理解为/tmp/)。因此尽可能使用“通用化”的方式来给目录、文件命名,最安全的字符包括英文大小写、数字、下划线、减号等。
- 空格:在":"之后允许空格,命令与":"中间则不要空格。
- 注释行、空行:robots.txt文件中,注释行、空行不影响执行。"#"到行尾的内容被认为是注释。为了普适性起见,推荐行首书写"#"的完整注释行,不推荐在某个命令行的尾部添加部分注释——说不准哪个爬虫可能不适应命令/注释混在一起的情形。
- 换行符:支持多种换行格式,如CR、LF、CR+LF。换句话说,您可以随便使用常见的文本编辑器来编写robots.txt。
User-agent: *的特别说明
“User-agent: *”命令指定之后的Disallow限制适用于所有爬虫。但还有一种说法是:这种用法的Disallow限制适用于robots.txt中没有明确提到名称的爬虫。这带来了实际理解的混乱,例如对于:
User-agent: Baiduspider Disallow: /tmp User-agent: * Disallow: /cgi-bin
一种理解是Baiduspider不能访问/tmp、/cgi-bin两个目录,其他爬虫不能访问/cgi-bin目录;另一种理解则是/tmp目录仅限制Baiduspider的访问,而/cgi-bin目录限制其他爬虫的访问。
鉴于这种理解混乱,建议将需要封闭的通用内容对每个爬虫限定都重写一遍,例如上面的例子改写为:
User-agent: Baiduspider Disallow: /tmp Disallow: /cgi-bin User-agent: * Disallow: /cgi-bin
关于理解混乱的内容仅根据多份资料进行推理,有待于其他实践资料或权威说明佐证(欢迎补充资料)
增强性功能
参见robots.txt的增强功能一文,包括对网址中"?*$"字符的使用、Allow命令、抓取频度、sitemap指定等。
其他提醒
- robots.txt文件必须放在网站根目录下。
- 位于子目录中的robots.txt将不起作用——形如"http://www.abc.com/xxx/robots.txt"等子目录中的robots.txt将无法被爬虫程序所采用。
- robots.txt的文件名必须全部小写
- robots.txt总是可被访问的,不受其内容“Disallow:/”的限制
- robots.txt是个“君子协定”,它不能防止不守规矩的爬虫抓取你的隐秘内容!
- robots.txt不能阻止搜索引擎收录受限的页面。禁止收录页面的方法请参考禁止搜索引擎收录一文。


