- 拒绝机器人访问标准:1994 年,人们提出了一项简单的自愿约束技术,可以将机器人阻挡在不适合它的地方之外,并为网站管理员提供了一种能够更好地控制机器人行为的机制。这个标准被称为“拒绝机器人访问标准”,但通常只是根据存储访问控制信息的文件而将其称为 robots.txt。
- robots.txt 的思想很简单。所有 Web 服务器都可以在服务器的文档根目录中提供一个可选的、名为 robots.txt 的文件。这个文件包含的信息说明了机器人可以访问服务器的哪些部分。如果机器人遵循这个自愿约束标准,它会在访问那个站点的所有其他资源之前,从 Web 站点请求 robots.txt 文件。
1. 拒绝机器人访问标准
版本 | 标题及描述 | 日期 |
---|---|---|
0.0 | 拒绝机器人标准——Martijn Koster 提出的带有 Disallow(不允许)指令的原始 robots.txt 机制 | 1994 年 6 月 |
1.0 | 控制 Web 机器人的方法——Martijn Koster 提供了额外支持 Allow (允许)的 IETF 草案 | 1996 年 11 月 |
2.0 | 拒绝机器人访问的扩展标准——Sean Conner 提出的扩展标准,包括了正则表达式和定时信息;没有得到广泛的支持 | 1996 年 11 月 |
- 现在大多数机器人采用的都是标准 v0.0 或 v1.0。重点介绍 v1.0 标准,因为它的应用很广泛,而且与 v0.0 完全兼容。
2. Web 站点和 robots.txt 文件
- 如果一个 Web 站点有 robots.txt 文件,那么在访问这个 Web 站点上的任意 URL 之前,机器人都必须获取它并对其进行处理。尽管我们说的是 robots.txt 文件,但 robots.txt 资源并不一定要严格地位于文件系统中。比如,可以由一个网关应用程序动态地生成这个 robots.txt 资源。
- 由主机名和端口号定义的整个 Web 站点上仅有一个 robots.txt 资源。如果这个站点是虚拟主机,每个虚拟的 docroot 都可以有一个不同的 robots.txt 文件,像所有其他文件一样。
- 通常不能在 Web 站点上单独的子目录中安装“本地”robots.txt 文件。网管要负责 创建一个聚合型 robots.txt 文件,用以描述 Web 站点上所有内容的拒绝访问规则。
1. 获取 robots.txt
- 机器人会用 HTTP 的 GET 方法来获取 robots.txt 资源,就像获取 Web 服务器上所有其他资源一样。如果有 robots.txt 文件的话,服务器会将其放在一个 text/plain 主体中返回。如果服务器以 404 Not Found HTTP 状态码进行响应,机器人就可以认为这个服务器上没有机器人访问限制,它可以请求任意的文件。
- 机器人应该在 From 首部和 User-Agent 首部中传输标识信息,以帮助站点管理者对机器人的访问进行跟踪,并在站点管理者要查询,或投诉的机器人事件中提供一些联系信息。下面是一个来自商业 Web 机器人的 HTTP 爬虫请求实例:
GET /robots.txt HTTP/1.0
Host: www.joes-hardware.com
User-Agent: Slurp/2.0
Date: Wed Oct 3 20:22:48 EST 2001
2. 响应码
很多 Web 站点都没有 robots.txt 资源,但机器人并不知道这一点。它必须尝试着从每个站点上获取 robots.txt 资源。机器人会根据对 robots.txt 检索的结果采取不同的行动:
* 如果服务器以一个成功状态(HTTP 状态码 2XX)为响应,机器人就必须对内容进行解析,并使用排斥规则从那个站点上获取内容。
* 如果服务器响应说明资源并不存在(HTTP 状态码 404),机器人就可以认为服务器没有激活任何排斥规则,对此站点的访问不受 robots.txt 的限制。
* 如果服务器响应说明有访问限制(HTTP 状态码 401 或 403),机器人就应该认为对此站点的访问是完全受限的。
* 如果请求尝试的结果是临时故障(HTTP 状态码 503),机器人就应该推迟对此站点的访问,直到可以获取该资源为止。
* 如果服务器响应说明是重定向(HTTP 状态码 3XX),机器人就应该跟着重定向,直到找到资源为止。
3. robots.txt 文件的格式
- robots.txt 文件采用了非常简单的,面向行的语法。robots.txt 文件中有三种类型的行:空行、注释行和规则行。规则行形式为“名:值”对,用于匹配模式:
# this robots.txt file allows Slurp & Webcrawler to crawl
#