想象你经营一家果汁公司,想从郊外的果园采摘水果榨汁。果园门口挂着告示牌,写着哪些区域能进、哪些区域禁止采摘;售票窗口印着入园须知;树上的果实可能有主人留下的产权标记。你雇来的采摘工如果无视告示、翻越高墙、顺手把果树枝条也砍走,轻则被赶出园子,重则要吃官司。AI 时代的爬虫,就是这位采摘工;互联网上的网页数据,就是那些果实。爬虫合规,本质上就是搞清楚三个问题:哪些果园能进、怎么摘才不被赶出去、摘来的果子怎么用才不违法。这篇内容会带你把数据果园完整走一遍,从概念边界、行为守则、机器人协议、用户协议到知识产权与技术红线,最后给出工程落地的合规策略。

岗位关联

数据爬取是 AI 时代的“水电”,但接错管道可能赔掉整个公司。掌握爬虫合规范式,是 AI 从业者把技术变成商业化产品的基本生存技能。

目录
  1. 可视化演示
  2. 概念与边界
  3. 合规基石
  4. 机器人协议
  5. 用户协议
  6. 知识产权
  7. 技术红线
  8. 数据使用
  9. 合规实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示网络爬虫数据采集的合规审查流程,包含Robots协议检查、数据分级合规管理与反爬规避风险评估三个关键环节。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Robots协议合规检查 爬虫抓取前必须检查robots.txt 允许路径合规通过,禁止路径自动过滤 Allow + Disallow = robots.txt Robots协议虽无强制力但法院常作重要参考

概念与边界

果园不都是完全开放的,有的果子长在路边,伸手就能碰到;有的果子长在围栏里,需要门票甚至钥匙。爬虫技术像一把自动剪刀,可以快速剪下网页上的数据,但剪刀能不能伸出去,取决于数据长在哪个区域。AI 训练需要数据,于是不少人让爬虫满网“剪枝”,却从没想过这条路本身是否合法。

互联网上公开可见的页面,类似路边的果子;但登录后可见、付费墙内、需要授权接口才能访问的数据,就是围栏内的果林。爬虫合规的第一步,是判断目标数据属于哪种访问层级:完全公开、半公开,还是需要特殊授权。很多人觉得“只要能打开网页就能爬”,这是把“看得见”等同于“拿得到”。

技术层面,爬虫是脚本自动发起 HTTP 请求并解析 HTML、JSON 等数据;合规层面,“公开数据”不代表“免费数据”,更不代表“可商用数据”。页面是否声明禁止自动化访问、是否包含个人信息、是否受著作权保护,都会影响行为的法律性质。边界感,决定了你是来果园采购,还是来偷果子。

采摘前先看清果园边界,才能避开大部分雷区。路边的果子可以摘,但你要先确认它没有被喷洒“禁止采摘”的农药。

合规基石

果园主人并不反感采摘,反感的是乱摘一气的人。有人一次性把整棵树的果子摇光,有人把果园的网络给堵住了。合规爬虫的核心,是把自己定位成“礼貌的访客”:目的正当、手段合法、频率克制、尊重协议。

所谓目的正当,是指采集数据不是为了恶意攻击、抄袭竞争或侵犯隐私;手段合法,是指不使用绕过技术措施的黑客手段;频率克制,是指不要像洪水一样涌向目标网站。这四条共同构成爬虫合规的地基。

其中频率克制可以直接量化:爬虫在时间窗口内发起的请求数不能超过服务器能承受的阈值。用公式表示就是:

守规矩的采摘工懂得在园门口放慢脚步,一次摘一点,留出时间让果树继续生长。

R=NT≤Rlimit\displaystyle R = \frac{N}{T} \le R_{\text{limit}}
这个公式的意思是:单位时间内的请求次数必须控制在网站容忍的速率以下,否则再“正当”的目的也会因为方式粗暴而变得违规。
  1. R(请求速率)爬虫每秒或每分钟发出的请求数,是服务器承载压力的第一指标。
    RR
  2. N(请求总数)在一个时间窗口内,爬虫实际发起的 HTTP 请求数量。
    NN
  3. T(时间窗口)从第一个请求到最后一个请求所经过的秒数。
    TT
  4. R_limit(服务器阈值)目标网站能承受的最大请求速率,超过后可能触发限流、封禁甚至法律维权。
    RlimitR_{\text{limit}}

机器人协议

果园门口的告示牌,不会说人话,但采摘工看得懂。网站也一样,通过根目录下的 robots.txt 文件,用机器能读懂的语法告诉所有爬虫:哪些区域欢迎你,哪些区域请止步。

这个协议由 User-agent、Allow、Disallow 和 Sitemap 等字段组成。User-agent 用来指定某个爬虫名字,Disallow 指明禁止访问的路径,Allow 则声明在白名单内的路径,Sitemap 相当于给出一份果园地图。

它虽然不是法律文件,却是数据所有者意愿的直接表达。无视 robots.txt,就像无视告示牌冲进禁区;即便没有立刻被起诉,也会在纠纷中变成“明知故犯”的证据。正规搜索引擎、大公司爬虫和成熟的合规团队,都会先读这份文件。

不看告示牌就冲进去,园主人会记住你。下一次,他可能直接给你发律师函而不是口头警告。

用户协议

买票进果园,等于接受了门票背面印的入园须知。用户协议(Terms of Service,简称 ToS)就是网站给所有访客的入园须知,它写明了数据的使用边界。

很多网站的 ToS 明确禁止自动化抓取、禁止将数据用于商业用途、禁止绕过登录机制。爬虫一旦注册了账号并抓取站内数据,就等于在明知规则的情况下违约。即便数据看似公开,ToS 也可能把“仅供个人浏览”这样的限制写在角落。

对于 AI 公司来说,用户协议比 robots.txt 更麻烦:前者是技术声明,后者是法律契约。抓取数据前,法务需要逐条读清“授权范围”“禁止行为”“违约责任”等条款,尤其是关于模型训练和商用的部分。

摘果之前,先看看门票背面的字;一旦摘了,默认你同意这些条款。

知识产权

果园里的每棵树,都可能刻着主人的名字。爬下来的数据并不因为到达你的硬盘就变成无主之物,网页上的文字、图片、音视频仍受著作权保护;结构化数据库还可能受数据库权利保护。

把抓来的内容原样整理成自己的产品,是最常见的侵权姿势。判定侵权时,司法实践会关注“实质性相似”:如果除了来源不同,内容几乎一样,就难逃复制权侵权。即使是摘要、改写,如果过度依赖原文表达,也可能构成演绎侵权。

商标商誉也在范围内:爬取竞品数据并伪装成自己的内容,会让用户误以为二者同源,从而构成不正当竞争。合规的做法是只提取必要的事实信息,标明来源,并在合理使用范围内引用。

摘果不是把整棵果树连根拔起。果子拿走可以,树还留在园里,树上的产权标记你同样要尊重。

技术红线

有些果园装了电子围栏,翻墙进去就是偷窃。反爬机制就是数据果园的电子围栏:验证码、IP 限频、请求签名、行为检测,都是在阻止未经授权的人闯入。

踩着红线的常见操作包括:伪造 User-Agent 伪装成浏览器、使用代理池轮换 IP、破解验证码、绕过前端加密。这些技术手段看似“聪明”,但在法律上可能构成“规避技术保护措施”,轻则民事侵权,重则承担行政甚至刑事责任。

合规的做法不是绕过围栏,而是降低自身攻击性。当请求被限流时,使用退避算法可以让爬虫慢慢冷静下来:

即便最后拿到了果子,进入果园的方式不对,整筐果实都可能在法庭上被没收。

tn=min⁡(Tmax⁡, T0×2 n−1)\displaystyle t_n = \min \left( T_{\max},\ T_0 \times 2^{\,n-1} \right)
退避算法解决的是“被拒绝后怎么办”:不要立刻重试,而是指数级拉长等待时间,避免对服务器造成进一步冲击。
  1. t_n(等待时间)第 n 次请求失败后,下一次发起请求前需要等待的秒数。
    tnt_n
  2. T_0(初始退避时间)第一次失败后的基准等待时间,比如 1 秒。
    T0T_0
  3. 2^{n-1}(指数因子)失败次数越多,等待时间翻倍,体现“越撞墙越要慢下来”的礼貌策略。
    2 n−12^{\,n-1}
  4. T_max(封顶时间)等待时间不能无限增长,设置 60 秒之类的上限,让爬虫不致于永远卡住。
    Tmax⁡T_{\max}

数据使用

摘下来的果子如何搬运、加工、分给别人,同样有讲究。数据离开源网站之后,依然带着原主人的权利标签。

首先,合理引用要控制数量并标明出处,而不是长文转载;其次,凡是涉及个人信息的字段,必须做去标识化处理,否则可能违反个人信息保护法;最后,再发布行为要看原始授权,很多网站允许展示但不允许二次分发,更不允许拿去训练商用 AI 模型。

对 AI 从业者来说,最大的坑是“抓取时合规,训练后失控”。模型会把训练数据内化进参数,一旦训练集包含版权内容,生成结果就可能复现原文片段。因此,在数据入库前就要做来源标注、许可证审查和内容过滤。

果实离开果园,规矩依然跟着走。果篮上写着产地,消费者有权知道这些数据从哪里来。

合规实践

老练的采果人不会只带一个袋子,而是带上一整套工具箱。爬虫合规的落地,也需要把零散的原则变成可执行的工作流。

第一步是风险审计:判断目标网站类型、访问权限、是否包含个人信息;第二步是检查 robots.txt 和用户协议;第三步是设计频率控制与退避策略;第四步是优先使用官方 API。官方 API 是果园主人亲手递出来的篮子,合规风险最低。

工程上,还要保留抓取日志、设置并发上限、定期更新站点名单,并在涉及重大商业模式时咨询专业法务。合规不是一次性审查,而是伴随产品迭代的持续动作。

工具箱里的工具,让每一次采摘都站得住脚;当竞争对手因为侵权被下架时,你可能已经在果园主人的台子上签下了长期合作。

AI 应用场景

AI 创业公司的训练数据采集

阶段:数据采集与准备

解决的问题:传统爬虫盲抓公开网页,容易触发反爬、浪费带宽,还埋下侵权隐患。AI 公司需要把“能不能爬”“怎么爬”变成自动化检查,降低法律风险。

具体案例:某 SaaS 团队要训练电商客服模型,先读取目标站点 robots.txt,只在 Disallow 之外的 FAQ 页面抓取,并调用官方开放 API 获取商品类目,避免登录抓取用户订单数据。

舆情监测平台的内容引用合规

阶段:数据清洗与内容分析

解决的问题:直接全文转载新闻会侵犯著作权。AI 企业需要在不照搬原文的前提下,提取关键信息,让数据“可用但不可抄”。

具体案例:某舆情 SaaS 每天监测数百家媒体,通过摘要算法只保留少量关键词与情感倾向,并回链原文,既满足客户分析需求,又规避转载风险。

大模型训练语料过滤

阶段:语料构建与合规审查

解决的问题:训练语料来自多源头爬取,混杂个人信息、版权内容和重复数据。AI 工程师必须在模型训练前完成合规收口。

具体案例:某公司构建中文预训练语料,对抓取数据做电话号码、身份证号脱敏,对来源域名做白名单校验,并按 URL 去重,最后为每条例证记录来源链接。

Python 演示

python41 行
import timeimport urllib.robotparserimport requestsfrom urllib.parse import urljoin  class PoliteCrawler:    def __init__(self, base_url, user_agent="CompliantBot/1.0"):        self.base_url = base_url        self.user_agent = user_agent        self.parser = urllib.robotparser.RobotFileParser()        self.parser.set_url(urljoin(base_url, "/robots.txt"))        self.parser.read()        self.min_interval = 1.0        self._retry_count = 0     def can_fetch(self, path):        return self.parser.can_fetch(self.user_agent, urljoin(self.base_url, path))     def fetch(self, path):        if not self.can_fetch(path):            return None        time.sleep(self.min_interval)        url = urljoin(self.base_url, path)        try:            resp = requests.get(url, headers={"User-Agent": self.user_agent}, timeout=5)        except requests.RequestException:            return None        if resp.status_code == 429:            wait = min(60.0, 1.0 * (2 ** self._retry_count))            self._retry_count += 1            time.sleep(wait)            return self.fetch(path)        self._retry_count = 0        return resp  if __name__ == "__main__":    bot = PoliteCrawler("https://example.com")    html = bot.fetch("/public/news")    print(html.text if html else "robots blocked")
目的:实现一个“先看告示牌、再按频率采摘”的合规爬虫,自动检查 robots.txt,并在被限流时使用指数退避等待。
  1. self.parser.set_url(urljoin(base_url, "/robots.txt"))定位果园门口的告示牌,拼出完整的 robots 文件地址。
  2. self.parser.read()把告示牌内容读进来,后面所有判断都基于它。
  3. self.parser.can_fetch(self.user_agent, urljoin(self.base_url, path))问告示牌:我这个访客能不能进这条路径。
  4. time.sleep(self.min_interval)每次请求前固定休息一秒,控制采摘节奏。
  5. wait = min(60.0, 1.0 * (2 ** self._retry_count))被拒绝后按指数退避等待,第一次 1 秒,之后 2、4、8 秒,直到 60 秒封顶。
  6. return self.fetch(path)等待结束后重新请求,采用递归方式模拟重试,但不会无限循环。
  7. print(html.text if html else "robots blocked")如果告示牌禁止,就直接输出被拦截,而不是强行闯门。

常见误区

误区我只要遵守了 robots.txt,就代表所有抓取行为都合法了,出了事也不怕。

正解robots.txt 更像是果园门口的告示,遵守它只是第一步。用户协议、著作权、个人信息保护、数据库权利都是独立约束。无视告示则会成为诉讼中的不利证据,但遵守告示并不代表拿到完整豁免。

为何常见:因为 robots 是唯一显式的机器指令,容易让人误以为它就是法律全部。

误区网页能直接打开,数据就是公开的,爬下来随便用。

正解公开发布不等于授权抓取和利用。果子挂在路边,不等于你可以翻墙进园子摘;还要看用户协议和著作权。登录后可见的数据更不能算公开。

为何常见:人们习惯用“肉眼是否可见”判断合法性,忽略了授权这个维度。

误区改 User-Agent、上代理池、解验证码,不过是技术骚操作,最多被封 IP,不会坐牢。

正解绕过验证码、伪造身份、规避 IP 封禁,可能构成“规避技术保护措施”,民事上侵犯权益,严重时可引发刑事责任。

为何常见:技术圈常把反爬当成攻防游戏,淡化了背后的法律属性。

误区只要不把抓到的内容发出去,只是存在自己服务器里,应该没关系。

正解复制行为本身就可能侵犯复制权;即使不发布,存储、传输、挖掘也会触及著作权、数据库权利和个人信息保护。爬取前就要评估,而不是等发布时再想。

为何常见:以为“没有公开利用”就没有损害,忽视了复制权是独立的法定权利。

误区官方 API 是正规通道,拿到数据后可以任意商用。

正解API 只是通道,不代表把所有权利一并授权。开发者仍要看 API 条款中的使用范围、频率限制和商用条件,有些 API 明确禁止用于训练模型。

为何常见:觉得“官方”二字有天然授权属性,忽略了细则里的坑。

面试题

Q1. robots.txt 的主要作用是什么?

单选题 · easy

  • A.强制限制所有人爬取
  • B.告诉爬虫哪些路径禁止← 正确答案
  • C.加密网站页面内容
  • D.屏蔽搜索引擎收录

答案:B。robots.txt 是给爬虫看的告示牌,通过 Disallow 声明禁止路径,但它不是强加密手段,也不会强制限制真人访问。选 B 最准确。

Q2. 关于“公开数据”,下列说法正确的是?

单选题 · easy

  • A.等于免费使用
  • B.仍需遵守协议← 正确答案
  • C.可任意转发
  • D.仅限个人使用

答案:B。公开数据只表示无需登录即可见,不代表放弃权利。用户协议、著作权、个人信息等仍然会约束使用方式,因此“仍需遵守协议”正确。

Q3. 关于绕过反爬机制,以下说法正确的是?

单选题 · mid

  • A.只要不被封 IP 就合规
  • B.可能构成破坏技术措施← 正确答案
  • C.技术中立永远合法
  • D.仅违反道德无法律风险

答案:B。绕过验证码、伪装身份等技术手段,可能被认定为规避技术保护措施,触发民事或刑事责任。技术中立不是万能挡箭牌。

Q4. 抓取数据时违反网站用户协议,主要风险是?

单选题 · mid

  • A.没有强制力
  • B.仅约束注册用户
  • C.只是单方声明
  • D.可能构成违约← 正确答案

答案:D。用户协议是双边契约,访问网站并注册使用即表示同意。违反其中禁止抓取条款,可能构成违约并承担赔偿责任。

Q5. 解析 robots.txt 时,通常需要关注哪些字段?

多选题 · mid

  • A.User-agent← 正确答案
  • B.Disallow← 正确答案
  • C.HTTP 状态码
  • D.HTML 标签

答案:AB。robots.txt 通过 User-agent 指定爬虫,通过 Disallow 声明禁止路径。HTTP 状态码和 HTML 标签不属于该文件的核心语法。

Q6. 将抓取来的数据库内容原样整理并发布,最可能侵犯?

单选题 · hard

  • A.专利权
  • B.著作权← 正确答案
  • C.商标权
  • D.名誉权

答案:B。数据库内容的选取和编排可能受著作权及数据库权利保护,原样复制发布构成实质性相似,最直接的侵权类型是著作权。

Q7. 以下哪些属于不合规的技术手段?

多选题 · hard

  • A.伪造身份绕过限制← 正确答案
  • B.高频并发抓取← 正确答案
  • C.使用官方 API
  • D.破解验证码← 正确答案

答案:ABD。官方 API 是合规通道;伪造身份、高频并发施压、破解验证码都属于绕过技术措施或非法侵入,会放大法律风险。

Q8. 指数退避策略中,连续失败时等待时长的变化趋势是?

单选题 · mid

  • A.线性增长
  • B.指数增长← 正确答案
  • C.保持不变
  • D.随机波动

答案:B。公式 t_n = min(T_max, T_0 × 2^(n-1)) 表明等待时间按 2 的幂次翻倍,属于指数增长,能快速降低对服务器的冲击。

Q9. 判断爬虫是否合规,需要重点审查哪些方面?

多选题 · hard

  • A.请求频率← 正确答案
  • B.是否登录访问← 正确答案
  • C.数据是否公开
  • D.robots 协议← 正确答案

答案:ABD。请求频率关系服务器压力,登录访问涉及授权边界,robots 协议表达所有者意愿;而“数据公开”并不等于可以任意采集,不能作为合规的充分依据。

Q10. 某网站 robots.txt 禁止爬取,但用户协议允许,正确的做法是?

单选题 · extreme

  • A.以用户协议为准直接爬取
  • B.以 robots 为准直接放弃
  • C.征得网站明确授权后再爬← 正确答案
  • D.用代理池绕开 robots 限制

答案:C。robots 与用户协议冲突时,最好回到权利人本身。直接爬取或简单放弃都可能踩坑,最稳妥的方式是获得网站明确授权,绕开 robots 则属于红线行为。