本页内容
2026 年 7 月 7 日,robots.txt 不再只是行业礼仪。
那一天,欧洲数据保护委员会(EDPB)通过了关于生成式 AI 场景下网页抓取的 Guidelines 03/2026——第一个针对大规模抓取公开可用数据以训练生成式模型的完整 GDPR(通用数据保护条例)框架。其中关于权衡测试的章节给出了一个直接影响工程实践的立场:robots.txt、ai.txt、CAPTCHA 和登录墙都是数据主体合理预期的指标。大规模抓取时无视它们,争论的焦点就不再是服务条款,而是第 6(1)(f) 条。
搜索“is web scraping legal”排名靠前的每个页面,都是律所写给其他律师看的。这一篇是写给真正编写爬虫的人的版本。
这不是法律建议。 这是对一份已发布监管文件的工程视角解读。Guidelines 03/2026 的公开咨询将持续到 2026 年 10 月底,最终版本预计不会早于 2026 年底发布。在上线任何涉及欧盟个人数据的管道之前,请先咨询法律顾问。
目录
- 2026 年网页抓取还合法吗?
- 2026 年 7 月 7 日发生了什么变化?
- robots.txt 现在有法律效力了吗?
- 你实际能依赖哪种法律依据?
- 定向抓取还是非定向爬取?
- 数据最小化在代码里意味着什么?
- 抓到特殊类别数据怎么办?
- 你必须告知被抓取的人吗?
- 你是控制者还是处理者?
- 美国的立场有何不同?
- 爬虫开发者应该做出哪些改变?
- CrawlForge 的定位
2026 年网页抓取还合法吗?
合法,但有条件。在欧盟和美国,抓取一个可公开访问的页面本身并不违法。合法性取决于你收集了什么、为什么收集、以及数据之后的去向——而在欧盟,任何涉及个人数据的抓取都是一次处理操作,在第一个请求发出之前就需要合法依据。
两套法律体系问的问题不同。欧盟问你的法律依据是什么、能否举证;美国没有联邦层面的抓取法规,由合同、版权和州隐私法来承担这项工作。
这里最容易造成误解的词是公开。“公开可用”不是 GDPR 里的类别。会议议程上的名字、博客文章下的评论、commit 里维护者的邮箱——都是个人数据,都在适用范围内。EDPB 的立场是,互联网内容“几乎总是”涉及个人数据,混合数据集也无法逃脱:其中的个人数据部分仍然受 GDPR 约束。
2026 年 7 月 7 日发生了什么变化?
7 月之前,欧盟的抓取合规是从各类 GDPR 指导文件里类推拼凑出来的。Guidelines 03/2026 用一个专门针对生成式 AI 训练的框架取代了这种做法。
| 项目 | 详情 |
|---|---|
| 通过时间 | 2026 年 7 月 7 日,1.0 版 |
| 主题 | 生成式 AI 场景下的网页抓取 |
| 适用范围 | 私营实体的抓取行为 |
| 触发条件 | 任何涉及个人数据的抓取——对互联网内容而言“几乎总是” |
| 混合数据集 | 个人数据部分仍受 GDPR 约束 |
| 公开咨询 | 持续到 2026 年 10 月底 |
| 最终版本 | 预计不早于 2026 年底 |
措辞仍可能调整,所以不要把它硬编码进你的合规程序。但它所解释的义务是现行法律,现在就可执行——等最终文本出来不会给你带来任何好处。
robots.txt 现在有法律效力了吗?
没有直接效力。robots.txt 是一种约定而非法规,跳过它本身并不构成违法。变化在于它的证据角色:EDPB 把 robots.txt、ai.txt、CAPTCHA 和登录墙视为数据主体合理预期的指标,是合法利益权衡测试的输入之一。当一个网站部署了这些信号并声明其数据不得用于 AI 训练时,EDPB 的立场是数据主体没有被抓取的合理预期。
过去无视一条 Disallow,只是一个可以事后再争论的服务条款和版权问题。现在它会直接在你整个法律依据所依赖的那个测试中对你不利。
| 网站上的信号 | Guidelines 03/2026 如何解读 | 你的爬虫应该怎么做 |
|---|---|---|
robots.txt Disallow | 不希望被爬取的预期 | 默认遵守;记录每次跳过 |
ai.txt 或明确的禁止 AI 训练声明 | 对训练用途的明确反对 | 将该域名排除出训练语料 |
| CAPTCHA | 访问控制;绕过它会在权衡中对你不利 | 不要为构建语料而以程序方式破解 |
| 登录墙 | 内容并非公开可用 | 不要为采集数据而登录认证 |
有两件事在这里常被混为一谈,但它们本不应该。我们的 stealth mode 指南讲的是对任何访客都公开的页面上的浏览器指纹问题。登录墙是另一种行为,而且自 2026 年 7 月起,它在原有的合同风险之上又叠加了 GDPR 层面的分量。
你实际能依赖哪种法律依据?
用 EDPB 的话说,第 6(1)(a) 条下的同意“通常不是可行的法律依据”,无法支撑大规模抓取:你不可能从数百万个被你爬取过页面的人那里获得有效、具体、自由作出的同意。剩下的就是第 6(1)(f) 条下的合法利益——一个三部分的累积测试,任何一部分不通过,整体即告失败。
| 步骤 | 它问什么 | 你需要留存什么 |
|---|---|---|
| 1. 利益 | 是否合法、真实且被精确定义? | 每个语料库一份目的说明。EDPB 认可开发对话式智能体、欺诈检测,以及一般性的 AI 模型开发 |
| 2. 必要性 | 是否存在同样有效但侵入性更低的路径? | 一份书面比较,列出你否决过的替代方案:更窄的筛选标准、合成数据、假名化数据 |
| 3. 权衡 | 数据主体的权利和合理预期是否压过你的利益? | 你遵守了哪些信号、排除了哪些域名、如何处理退出请求的记录 |
第 2 步是工程团队最容易低估的一步。“我们需要整个网络”不是必要性论证。更窄的爬取标准、合成数据、摄取阶段的假名化,都被点名列为侵入性更低的替代方案——如果你从未评估过它们,你就没有任何尝试过的记录。
定向抓取还是非定向爬取?
该指南区分了定向抓取——限制性标准、特定域名或主题——与不加限制地跟随链接的非定向爬取。非定向爬取的合规风险更高,因为一个没有边界的爬虫无法证明其收集是必要的。
| 定向抓取 | 非定向爬取 | |
|---|---|---|
| 定义 | 限制性标准;指定的域名或主题 | 不受限制的链接跟随 |
| 合规风险 | 较低 | 较高 |
| 必要性测试 | 容易举证 | 难以举证 |
| 典型形态 | 种子白名单、包含模式、页面上限 | 种子 URL、深度限制、跑到预算用完 |
这让爬取配置成了合规产物。你的包含模式、排除规则和页面上限就是必要性测试所要求的精确定义标准,所以它们应该进版本控制。
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({ name: 'corpus-builder', version: '1.0.0' });
interface SourceRecord {
url: string;
domain: string;
collectedAt: string; // ISO 时间戳——公开来源清单需要它
}
// 定向爬取:指定域名、显式包含模式、硬性页面上限。
const result = await client.callTool({
name: 'crawl_deep',
arguments: {
url: 'https://docs.python.org/3/',
max_pages: 500,
respect_robots: true, // 默认值;关掉它是一个你必须说明理由的决定
include_patterns: ['/3/library/', '/3/tutorial/'],
exclude_patterns: ['/genindex', '/search'],
},
});
const payload = result.content as Array<{ text: string }>;
const crawled = JSON.parse(payload[0].text) as { pages: Array<{ url: string }> };
// 第 14 条要求来源清单尽可能完整,最好附上收集日期。
// 这让数据溯源成了 schema 层面的要求。
const provenance: SourceRecord[] = crawled.pages.map((page) => ({
url: page.url,
domain: new URL(page.url).hostname,
collectedAt: new Date().toISOString(),
}));数据最小化在代码里意味着什么?
该指南在三个环节规定了最小化,每一个都对应你技术栈中的一个位置。
收集之前。 精确的标准、结构上敏感的网站类别直接排除、遵守 robots.txt 和 ai.txt、考虑合成数据。这属于种子列表和爬取配置的工作。
收集期间与之后。 用基于语法的过滤器识别标识符——社会保障号码是 EDPB 自己举的例子——然后做假名化或匿名化。这应该放在摄取路径里,在任何数据进入持久存储之前完成。
// 语法过滤器在任何数据进入持久存储之前运行。它们刻意做得粗糙:
// 用召回率换取一份可以拿得出手的最小化记录。
const IDENTIFIER_PATTERNS: Array<{ label: string; pattern: RegExp }> = [
{ label: 'us-ssn', pattern: /d{3}-d{2}-d{4}/g },
{ label: 'email', pattern: /[w.+-]+@[w-]+.[w.]{2,}/g },
];
interface RedactionResult {
text: string;
hits: Record<string, number>;
}
export function redactIdentifiers(input: string): RedactionResult {
const hits: Record<string, number> = {};
let text = input;
for (const { label, pattern } of IDENTIFIER_PATTERNS) {
const matches = text.match(pattern);
if (matches) {
hits[label] = matches.length;
text = text.replace(pattern, '[REDACTED:' + label + ']');
}
}
// 保留这些计数。它们是问责证据,不是调试输出。
return { text, hits };
}正则过滤器会漏掉很多东西:名字、地址和自由文本里的披露都会溜过去。把这一点如实记录下来,而不是宣称语料库是干净的——重点是可证明的削减,不是完美。
抓到特殊类别数据怎么办?
第 9 条数据——健康状况、政治观点、族裔——在任何大范围爬取中都会偶然出现。EDPB 的立场是,偶然收集并不自动违法,但只有在整个模型生命周期内都配备保障措施才站得住脚。该指南将这一点锚定在欧盟法院(CJEU)对 GC and Others(C-136/17)案的裁决上。
| 生命周期阶段 | 保障措施 | 落在哪里 |
|---|---|---|
| 收集之前 | 过滤掉可能携带第 9 条数据的来源和内容 | 种子列表和爬取配置 |
| 收集之后 | 及时删除漏网的数据 | 摄取管道和保留任务 |
| 模型开发期间 | 测试模型能否抵御对这类数据的提取 | 评估套件 |
| 部署之后 | 监控输出是否泄漏 | 生产遥测 |
这是四个不同的责任人。一个止步于摄取环节的合规叙事,只覆盖了要求的四分之一。
你必须告知被抓取的人吗?
逐一告知,通常不必。第 14(5)(b) 条豁免了会带来不成比例负担的直接通知,而逐个通知网络规模语料库中的每一个人正属于此类。但这不是免死金牌:你仍必须发布一份公开的隐私声明,覆盖数据类别、目的、法律依据,以及一份尽可能完整的来源清单——最好是可搜索的域名并附收集日期。预收集的退出机制被点名列为良好实践。
最后这条要求是一个伪装成法律问题的 schema 决策。如果爬虫没有为每条记录保存来源域名和收集日期,你之后就做不出那个页面,而在数亿文档的规模上重建溯源信息并不现实。写入时加两列即可,如上面的 SourceRecord 所示。
你是控制者还是处理者?
运行爬虫的实体并不自动成为控制者,而这个区分决定了上面所有义务由谁承担。
- 按客户的书面指示抓取——目标、标准和目的都由客户设定——看起来是处理行为。把指示落在书面上;那是这个角色站得住脚的关键。
- 自己选择目标和目的会让你成为控制者,包括你之后出售或发布语料库的情形。
- 复用别人抓取的数据集时,各方对自己的处理行为各自负责,除非你们共同决定目的和方式。
如果你把抓取作为服务出售,“客户指定了域名”和“我们挑选了域名”之间的差距,就是处理者义务和控制者义务之间的差距。
美国的立场有何不同?
美国没有联邦层面的网页抓取法规。针对抓取公开可访问数据的《计算机欺诈与滥用法》(CFAA)诉讼屡屡失败,hiQ v. LinkedIn 系列案件是最著名的例子。但这不意味着美国的抓取不受监管:合同条款、版权和州隐私法承担着相应的风险敞口。
版权是 AI 训练当前的活跃战线。Ropes & Gray 的 2026 年 5 月分析指出,使用抓取的数据训练模型、以及为检索增强生成提供动力,可能触及美国版权法下的复制权,并援引了美国版权局 2024 年的报告。
| 问题 | 欧盟(GDPR + Guidelines 03/2026) | 美国 |
|---|---|---|
| 适用规则 | GDPR;第 6(1)(f) 条合法利益测试 | 无联邦抓取法规 |
| 访问公开数据 | 无论是否公开可访问都需要合法依据 | CFAA 诉讼屡屡失败(hiQ 系列案件) |
robots.txt | 权衡测试中的证据 | 通过合同和服务条款来处理 |
| 训练用途 | 目的必须通过必要性和权衡测试 | 可能触及复制权 |
| 透明度 | 公开隐私声明加来源清单 | 无一般性的抓取披露义务 |
对面向全球发布的团队来说,欧盟的分析是严格的超集:按 Guidelines 03/2026 的要求构建,剩下的美国问题就只关乎许可和条款,而不是架构。
爬虫开发者应该做出哪些改变?
[ ] 为每条存储的记录保存来源域名 + 收集时间戳
[ ] 默认遵守 robots.txt 和 ai.txt;记录每一次跳过的决定
[ ] 绝不通过登录认证或破解 CAPTCHA 来构建训练语料
[ ] 优先使用包含模式爬取,而不是不受限制的链接跟随
[ ] 把爬取标准放进版本控制——它们是你的必要性证据
[ ] 写下你否决过的替代方案(合成数据、更窄的范围、假名化)
[ ] 在种子列表阶段排除结构上敏感的网站类别
[ ] 在任何数据进入持久存储之前过滤并假名化标识符
[ ] 发布隐私声明:类别、目的、法律依据、来源清单
[ ] 提供预收集的退出机制,并在种子列表中落实
Reed Smith 的指南解读建议从针对三部分测试的差距分析入手——这很务实,因为大多数差距最终都出在日志和文档上,而不是代码上。如果你正在搭建训练语料库,我们的 AI 训练数据网页抓取指南覆盖了同一问题的管道侧。
CrawlForge 的定位
说实话:它处理机械的部分,不处理任何需要判断的部分。
爬取工具默认遵守 robots.txt——crawl_deep 每次调用可传 respect_robots,服务器则读取 RESPECT_ROBOTS_TXT 作为全局默认值。因此关闭合规是可能的,而自 2026 年 7 月起,那是一个值得连同理由一起记录下来的决定。速率限制默认保持克制,工具只抓取公开可访问的页面——不绕过登录墙。访问控制和 SSRF 防护默认开启,原因见我们关于 MCP 服务器中的 SSRF 的文章。
没有任何工具能让一条违法的管道变得合法。27 个工具中没有一个会替你选择法律依据、撰写隐私声明、记录你否决过的替代方案,或判断你的语料库是否真的需要那个域名。这些是运营者的义务,Guidelines 03/2026 把它们放在了控制者身上。
要在实时网页数据上构建 AI 管道?免费开始,赠 1,000 credits——27 个工具全部默认遵守 robots.txt,无需信用卡。参阅文档,或阅读 AI 训练数据网页抓取指南。
亲自试一试——无需注册
在 Playground 中运行 CrawlForge 的 28 个抓取与提取工具中的任意一个,然后免费开始,获取 1,000 credits。
1,000 免费 credits • 一次性 • 无需信用卡
标签
及时获取最新洞察
将教程、产品更新与 Web 抓取技巧直接发送到你的收件箱。
拒绝垃圾邮件,随时可取消订阅。