# robots.txt用于网络爬虫：它的约束与非约束

robots.txt是一种约定，而不是合同，也不是锁。以下是它对爬虫的实际要求、无法强制执行的内容，以及如何在尊重它的同时获取数据。

每次关于爬虫伦理的讨论都从**robots.txt**开始，而大多数人都会在两个方向上犯错——要么把它当作一条违法会被逮捕的法律，要么完全忽视它。它既不是法律，也不是噪音。robots.txt是一种自愿约定，告诉行为良好的机器人网站希望它们避开的路径。准确了解它的约束和非约束是专业数据操作与鲁莽行为的区别。这是一个实践者指南，提前说明：这仅供参考，不是法律建议。

## robots.txt的实际意义

robots.txt实现了机器人排除协议，于2022年标准化为RFC 9309。它是一个位于域名根目录的纯文本文件——`https://example.com/robots.txt`——每个域或子域一个文件。它是可选的：`404`仅表示该网站没有文件，也没有表达偏好。关键是，这是一个请求，而不是障碍。提供robots.txt并不能从技术上阻止访问；它依赖于读取它的机器人的诚信。

阅读它是一个简单的请求——在你抓取任何内容之前，每次都要这样做：

```bash
# Just read it
curl -s https://example.com/robots.txt

# Through a proxy, as your scraper would see it
curl -s -x http://USER:PASS@residentialpremium.quantumproxies.io:8080 https://example.com/robots.txt
```

## 重要的指令

词汇量很小。学会这些，你就可以一眼读懂任何robots.txt：

- `User-agent`——以下规则针对哪个机器人。`*`表示所有机器人；像`Googlebot`这样的名称针对一个。指令名称不区分大小写，但路径值区分大小写：`/Private/`不是`/private/`。
- `Disallow`——不应抓取的路径前缀。`Disallow: /admin/`阻止该文件夹及其下的所有内容。`Disallow: /`阻止整个网站；空的`Disallow:`允许所有内容。
- `Allow`——一种非标准但普遍认可的覆盖，允许在被禁止的路径内的某个路径。
- `Crawl-delay`——一种非标准提示，要求请求之间间隔N秒。要遵守它：忽视它是被标记的最快方式之一。
- `Request-rate`和`Visit-time`——稀有指令，限制每个间隔的请求或限制爬虫在某些UTC时间内运行。
- `Sitemap`——指向XML站点地图的绝对URL。这不是限制，而是礼物：它为你映射了网站的结构。

关于语法的一个警告：路径模式中的通配符`*`和`$`不在原始标准中，但每个主要引擎都支持它们，因此`Disallow: /*.pdf$`在实践中常见且有效。

```python
import urllib.robotparser as rp

# Parse robots.txt and check a URL for your user agent
robots = rp.RobotFileParser()
robots.set_url("https://example.com/robots.txt")
robots.read()

UA = "MyResearchBot/1.0"
print(robots.can_fetch(UA, "https://example.com/products"))  # True / False
print(robots.crawl_delay(UA))                                 # seconds, or None
```

![关于 robots.txt 的两个面板：它是什么，一项已标准化为 RFC 9309 的自愿性约定，也是一个应当遵守的速率信号；它不是什么，不是能阻止访问的锁，也不是本身就具有约束力的合同；卡片把约定和 Crawl-delay 打勾标为真实有效，把法律效力和访问控制划掉。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335202/blog/generated/qp-b9-072-diag1.png)
*robots.txt是一个值得尊重的信号，而不是阻止你的锁或自行约束你的合同。*

## 它的约束——以及它不约束的内容

这是人们最需要澄清的部分。robots.txt本身并不具有法律约束力，也不是技术访问控制机制——它没有锁住任何东西。法院通常将众所周知的公共数据视为公共数据。但“本身不是法律”并不等于“没有后果”。忽视网站的声明愿望可能成为服务条款、侵入或计算机滥用争议中的一个因素，招致封锁和额外审查，而且这只是糟糕的公民行为。务实的立场是：将robots.txt视为你应遵守的伦理底线，并将实际的法律问题——个人数据、合同、管辖权——视为需要正确处理的单独事项。我们对[2026年网络爬虫合法性](https://quantumproxies.io/blog/is-web-scraping-legal-2026)的概述单独介绍了这些问题。

## AI爬虫的转变

robots.txt作为AI训练的选择退出渠道获得了第二次生命。网站现在为AI用户代理添加了明确的规则——`GPTBot`、`Google-Extended`、`CCBot`、`ClaudeBot`、`PerplexityBot`等——表示“索引我，但不要用我训练”。这就是为什么研究人员现在认为robots.txt本身已不足以将公共数据排除在模型之外：这完全取决于每个爬虫是否选择遵守，并且它只对声明的、行为良好的代理有效。如果你运营一个爬虫，声明一个诚实的User-Agent并尊重这些选择退出是基本要求。相反意图的新兴伴随文件——邀请AI工具进入——是llms.txt，我们在[llms.txt指南](https://quantumproxies.io/blog/llms-txt-guide-ai-crawlers)中介绍。

```bash
# A modern robots.txt often carries AI-specific opt-outs:
#   User-agent: GPTBot
#   Disallow: /
#
#   User-agent: Google-Extended
#   Disallow: /
#
#   User-agent: *
#   Crawl-delay: 5
#   Sitemap: https://example.com/sitemap.xml
```

![四步合规抓取：最先获取 robots.txt，匹配你声明的 User-agent，在请求之间遵守 Crawl-delay，只抓取允许的公开路径；卡片展示了 Python 的 robotparser 给出的答案：某路径的 can_fetch、以秒为单位的 crawl_delay，以及 404 表示网站未声明任何偏好。](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335202/blog/generated/qp-b9-072-diag2.png)
*合规抓取首先读取文件，遵守速率指令，并仅访问允许的公共路径。*

## 在获取数据的同时做一个好公民

尊重robots.txt并收集你需要的公共数据并不矛盾。保持你受欢迎的纪律也是保持你不被封锁的纪律：遵守`Crawl-delay`并合理安排请求，诚实地识别你的机器人，积极缓存以避免重新获取相同页面，并避免网站试图保护的昂贵端点。社区规范，在论坛上很好地表达了，robots.txt主要是为了阻止产生巨大流量的机器人——所以不要成为那个机器人。我们的[礼貌爬虫指南](https://quantumproxies.io/blog/polite-scraping-rate-limiting-guide)将其转化为具体的节奏规则。

对于希望默认处理合规的团队，[Scraper API](https://quantumproxies.io/scraper-api)可以在请求中读取并尊重robots.txt，同时进行合理的速率限制——因此良好的公民行为是工具的默认行为，而不是你可能忘记的复选框。它还保持了一个干净、声明的足迹，而不是从一个IP进行的原始脚本攻击。

[以合规方式收集公共数据](https://quantumproxies.io/scraper-api)

## 常见问题解答

### robots.txt在法律上适用于网络爬虫吗？

本身不适用。robots.txt是一个自愿约定（RFC 9309），不是法律或合同，并且在技术上不阻止访问。但忽视它可能导致服务条款、侵入或计算机滥用索赔，并招致封锁和审查。将其视为你应遵守的伦理底线，并单独处理实际的法律问题——个人数据、合同。这不是法律建议。

### 我如何阅读网站的robots.txt？

向域名根目录发送一个HTTP GET请求，附加`/robots.txt`，例如`https://example.com/robots.txt`。curl或任何HTTP客户端都可以；在Python中，`urllib.robotparser`解析它并为给定的用户代理和URL回答`can_fetch()`。`404`表示该网站没有robots.txt，也没有声明抓取偏好。

### Disallow: /是什么意思？

它要求所有匹配的机器人不要抓取网站上的任何路径——整个域名根据请求是禁止的。空的`Disallow:`表示相反：所有内容都被允许。记住，这些是对行为良好的爬虫的请求，而不是强制的障碍，并且路径值区分大小写，而指令名称不区分大小写。

### 如果数据是公开的，我可以忽略robots.txt吗？

从技术上讲，你可以，因为它不强制执行，但通常不应该。忽视它是糟糕的公民行为，会更快地导致你被封锁，并可能在争议中加强网站对你的论点。专业的方法是尊重它，只抓取允许的公共路径，合理安排请求，并完全排除个人数据。

robots.txt是一个小文件，传达了一个大信号：这是该网站希望被抓取的方式。首先阅读它，遵守路径和节奏，声明你是谁，你就可以在完全遵守礼仪和风险的情况下收集你需要的公共数据。

[尝试使用robots-aware爬虫的Scraper API](https://quantumproxies.io/scraper-api)
