2、数据抓取法律与伦理:Robots协议、数据隐私法规(GDPR、个人信息保护法)、合规抓取原则。
说实话,很多刚入行的朋友一上来就问我:「老师,爬虫到底违不违法?」
这个问题,我每次都得深吸一口气。因为答案不是简单的「是」或「否」。它取决于你抓什么、怎么抓、抓了之后怎么用。我做了这么多年数据工程,见过太多因为不懂法律而翻车的案例。今天咱们就把这事彻底聊透。
2.1 Robots协议:网站的「请勿打扰」牌
Robots协议,全称是 Robots Exclusion Protocol。说白了,就是网站主人挂在大门口的一块牌子。上面写着:「哪些地方你可以进,哪些地方你不能进。」
我个人习惯,在写任何爬虫之前,第一件事就是去看这个文件。它通常放在网站的根目录下,比如 https://example.com/robots.txt。
2.1.1 文件长什么样?
我给你看个真实的例子。这是我之前抓取某个电商平台时看到的:
User-agent: *
Disallow: /admin/
Disallow: /checkout/
Allow: /products/
User-agent: Baiduspider
Disallow: /
什么意思呢?
- User-agent: * 表示对所有爬虫生效。
- Disallow: /admin/ 管理后台别碰。
- Disallow: /checkout/ 结账流程别碰。
- Allow: /products/ 产品页面可以抓。
- 最后一行,专门针对百度爬虫,直接禁止抓取整个站。
嗯,这里要注意:Allow 指令不是所有爬虫都支持。有些老旧的爬虫只认 Disallow。所以如果你看到 Allow 和 Disallow 混用,最好自己测试一下。
2.1.2 我在项目中遇到过什么坑?
我曾经接手过一个项目,同事写了个爬虫,抓取某新闻网站的文章。他完全没看 robots.txt。结果那个网站对爬虫设置了 Crawl-delay: 10(每次请求间隔10秒)。他倒好,每秒发50个请求。不到5分钟,整个公司的IP段都被封了。老板差点让他写检讨。
requests.get('https://example.com/robots.txt') 看一眼。用 Python 的 robotparser 库可以自动解析,省心。
2.2 数据隐私法规:GDPR与个人信息保护法
这部分是重头戏。你想想看,你抓取的数据里,有没有包含用户的姓名、电话、邮箱、地址?如果有,那你就踩到红线了。
2.2.1 GDPR(通用数据保护条例)
这是欧盟2018年出台的法规。被称为「史上最严数据保护法」。为什么?因为罚款上限是2000万欧元,或者全球年营收的4%,取较高者。我有个朋友的公司,因为不小心抓取了欧盟用户的个人数据,被罚了120万欧元。那段时间他整个人都蔫了。
GDPR的核心原则,我总结成三条:
- 明确同意: 你不能偷偷摸摸地抓。用户必须明确知道你要抓他的数据,并且同意。
- 数据最小化: 只抓你需要的。别一股脑全扒下来。比如你只需要分析情绪,那就别抓用户的真实姓名。
- 删除权(被遗忘权): 用户有权要求你删除他的数据。你得有这个能力。
2.2.2 个人信息保护法(中国)
2021年11月1日,中国也正式实施了《个人信息保护法》。说白了,就是中国的GDPR。核心逻辑差不多,但有一些中国特色。
我挑几个关键点:
| 条款 | 核心要求 | 对爬虫的影响 |
|---|---|---|
| 第6条 | 处理个人信息应当具有明确、合理的目的 | 你不能说「我就想抓点数据玩玩」 |
| 第13条 | 需取得个人同意 | 抓取用户生成内容(UGC)时,要小心 |
| 第15条 | 个人有权撤回同意 | 你得提供删除数据的接口 |
| 第55条 | 发生数据泄露需通知 | 你的数据存储要安全 |
为什么会这样?说白了,立法者希望数据流动是「有序的、可控的」。你不能因为技术能力强,就为所欲为。
2.3 合规抓取原则:我的避坑指南
讲了这么多法律条文,你可能有点懵。别急,我总结了一套实操原则。你照着做,基本不会出大问题。
2.3.1 原则一:尊重 robots.txt
这是底线。哪怕法律不强制,这也是行业惯例。我曾经见过一个团队,觉得 robots.txt 只是建议,就强行抓取被禁止的路径。结果网站直接发了律师函。何必呢?
2.3.2 原则二:控制抓取频率
别做「ddos式爬虫」。我一般会设置 time.sleep(random.uniform(1, 3))。既保证效率,又不给服务器造成压力。你想想看,如果别人每秒访问你家100次,你烦不烦?
2.3.3 原则三:不抓个人身份信息
如果你抓的是社交媒体情绪数据,关注的是「情绪」本身,而不是「谁在表达情绪」。那就别抓用户名、头像、个人主页链接。只抓文本内容就够了。
2.3.4 原则四:数据脱敏与存储
万一你抓到了个人数据(比如用户ID),在存储前要做脱敏处理。比如把用户ID哈希化,或者只保留最后四位。我习惯用 hashlib.sha256() 做单向加密。这样即使数据库泄露,攻击者也拿不到原始数据。
2.3.5 原则五:保留来源与时间戳
每条数据都要记录来源URL和抓取时间。为什么?因为如果有人质疑你的数据来源,你可以自证清白。我在项目中遇到过审计,对方要求看数据溯源记录。幸好我每一条都打了标签,不然真说不清。
2.4 知识体系总览
为了让你更直观地理解,我画了一张图。这张图把本章的核心逻辑串起来了:
这张图你看懂了吗?从上到下,合规数据抓取分三条路:左边是技术层面的 Robots协议,中间是法律层面的隐私法规,右边是实操层面的合规原则。三者缺一不可。