AI 训练爬虫抓走内容,拦、放还是收费?本文讲清 AI爬虫 的识别、许可信号怎么写、Nginx 按 UA 分流怎么配,以及授权报价与合同要点。
Q:AI 爬虫抓我的内容去训练模型,到底合不合法?
- 先说结论:robots.txt 是行业约定,不是法律。写了 Disallow 对方照样抓,你只能靠技术拦。
- 境内路径:著作权法第二十四条的合理使用有明确边界,批量全文抓取用于训练通常难以落入;实务上也常引用反不正当竞争法第二条。
- 境外路径:欧盟 DSM 指令的文本与数据挖掘例外允许商业挖掘,但权利人可以用机器可读方式保留权利。这就是你现在能做的技术表达。
- 所以别指望「默认违法」替你解决问题,要靠三层:声明(robots 与许可信号)+ 技术(拦截与限频)+ 合同(授权条款)。
Q:怎么分清哪些是 AI 训练爬虫?
- 常见 UA:GPTBot、OAI-SearchBot、ChatGPT-User、ClaudeBot、Google-Extended、Applebot-Extended、CCBot、Bytespider、PerplexityBot、meta-externalagent。
- 必须区分的两组:GPTBot 是训练,OAI-SearchBot 是检索引用;Googlebot 管收录,Google-Extended 只管训练。拦错一组,损失的是搜索流量。
- UA 可以伪造,验证要看 IP:反查 rDNS 后缀是否属于官方域名,再对照官方公布的 IP 段。
- 先跑 30 天日志,按 UA 和 ASN 做一张抓取排行,谁抓得多一目了然。没有数据的谈判等于空手。
Q:「不许训练」在技术上怎么写?
- robots.txt 要按 UA 分组写,不要把所有 UA 塞进一个 User-agent 行,那是最常见的写法错误。
- 再加机器可读的许可信号:Content-Signal 响应头(ai-train、search 分开声明)与 TDM 保留声明。这两项是新兴约定,不具强制力,但能给合规方一个明确依据。
- 页面级 meta 和 llms.txt 只是补充说明,不能替代 robots.txt。
# robots.txt —— 分组写,允许搜索、禁止训练
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: OAI-SearchBot
Allow: /
Sitemap: https://www.example.com/sitemap.xml
Q:Nginx 侧怎么按 UA 分流?
- 核心技巧:map 的值为空字符串时,limit_req 对该请求不限速。用这一点可以把搜索引擎干净地放行。
- 分三档:纯训练爬虫直接 403、疑似训练爬虫限速并记日志、搜索引擎完全放行。
- 拦截一定要记日志,否则将来谈判时你拿不出「抓了多少」这件事。
map $http_user_agent $ai_class {
default 0;
"~*GPTBot|ClaudeBot|CCBot" 2; # 纯训练:拦
"~*Bytespider|PerplexityBot" 1; # 疑似训练:限速
"~*(Googlebot|Baiduspider|bingbot)" 0; # 搜索引擎:放行
}
map $ai_class $ai_key {
0 "";
default $binary_remote_addr;
}
limit_req_zone $ai_key zone=ai:10m rate=5r/m;
limit_req_status 429;
log_format ai '$remote_addr "$request" $status class=$ai_class ua="$http_user_agent"';
server {
listen 443 ssl http2;
server_name www.example.com;
access_log /var/log/nginx/ai.log ai;
add_header Content-Signal "ai-train=no, search=yes" always;
add_header TDM-Reservation "1" always;
if ($ai_class = 2) { return 403; }
location / {
limit_req zone=ai burst=10 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
- 上线前先只记录不拦截跑一周,确认没有误伤自己的监控和合作方,再开 403。
Q:想收费,授权模型怎么设计?
- 三种计费单位,按谈判难度从低到高:按抓取页数、按内容条目或 API 调用、包年白名单通道。
- 分档定价:公开页免费但限频,深度内容按页计价,历史全文与结构化数据按年授权。
- 技术落地就是给付费方一个 API key 加签名,走独立网关,不进反爬规则,免费抓取继续受限频约束。
- 关键动作:把「免费额度」写清楚,免费额度之外一律 429,对方才有付费动机。
# 付费通道:验 key + 宽松限流,与反爬规则分离
limit_req_zone $binary_remote_addr zone=paid:10m rate=300r/m;
location /ai-api/ {
if ($http_authorization !~ "^Bearer\s+[A-Za-z0-9._-]{24,}$") { return 401; }
limit_req zone=paid burst=200 nodelay;
proxy_pass http://127.0.0.1:9000;
proxy_set_header X-Client-Key $http_authorization;
}
Q:许可协议必须写清哪几条?
- 授权范围:哪些目录、哪些字段、是否含图片与附件,别用「网站内容」这种笼统表述。
- 使用目的:仅训练、是否可用于再分发、是否可用于生成竞品内容。
- 频率与并发:每秒请求数、抓取窗口时段,写数字不写「合理」。
- 留存与撤回:训练集缓存多久;已训练模型通常无法撤回,这一点必须提前写进条款,否则后面全是扯皮。
- 署名与审计:是否标注来源、年度抓取量如何对账、审计频率。
- 违约与终止:超量抓取的违约金、终止后如何删除数据。
Q:报价怎么定才不被压价?
- 先算清自己的内容资产:可索引页数乘以平均字数,折算成「百万字」,这是行业里最通用的计价单位。
- 找锚点:同类内容的 API 报价、行业数据采购价。别因为「我站小」就先自砍一刀。
- 报三档:试用(3 个月)/ 年度 / 独家,留出谈判空间,也筛掉只想白嫖的客户。
- 记住一句话:内容被训练进模型后基本收不回来,所以一次性买断的价格必须明显高于年度授权。
- 报价单里别只写总价,把「页数、字数、更新频率、独家性」列成表,客户才能横向比较。
Q:谈判时手里有什么筹码?
- 抓取日志:页数、频率、来源 ASN。这是最硬的证据,没有它你连对方抓了多少都说不清。
- 时效性内容:每日更新的价格、招投标、库存数据,对模型方价值最高,也最难替代。
- 可验证的白名单通道:给对方一个稳定的 IP 段加签名入口,对方省去对抗成本,你拿到可控与可计量。
- 反向筹码也要敢用:全面 Disallow 加 403,让对方拿不到增量数据,模型会随时间衰减。
- 谈判时先谈「量」再谈「价」,顺序反了容易被单价牵着走。
Q:拦死、收费、放行,怎么选?
- 看三个维度:内容是否独家、是否能带来 AI 搜索的引荐流量、维护成本多高。
- 新闻资讯类:放行搜索、限频训练,保收录更重要。
- 原创深度与独家数据:能谈授权就谈,谈不成就拦,别免费送。
- 商品页与工具页:放行,靠转化变现,拦了只会伤自己。
- 付费墙内内容:一律拦死,这是底线,不属于可谈判范围。
- 最忌讳一刀切:把 GPTBot 和 OAI-SearchBot 一起封,等于把 AI 搜索的入口也关了。
Q:还有什么补充建议
- 先观察再动手:30 天日志按 UA 与 ASN 出排行,再决定拦谁、给谁限频。
- UA 名单每季度复核一次,新的训练爬虫几乎每个月都冒出来。
- 技术上留一手「内容指纹」:对关键段落做哈希存档,将来需要举证时有据可查。
- 心态上摆正:授权是生意,不是技术对抗。能谈成合作就别硬拦,谈不成再用技术手段收口。
- 最后一条,所有拦截规则都要有到期复核日,反爬规则一旦上线就没人管,是最常见的隐患。