首页 / 数据采集与处理 / 第8章 爬虫反爬与合规

第8章 爬虫反爬与合规

理论2课时 + 上机2课时 | 难度:入门

8.1 常见反爬机制

网站为了保护自己的数据,会设置各种"障碍"阻止爬虫。了解这些机制,才能合法合规地采集数据。 User-Agent检测:检查请求来自浏览器还是程序,程序直接拒绝。 IP封禁:同一个IP请求太频繁,直接拉黑一段时间。 验证码:要求输入图片中的文字或点击特定图案。 动态加载:网页内容不是一次加载完,而是滚动或点击后才加载(Ajax)。 登录限制:必须登录后才能看到数据。

8.2 设置User-Agent

User-Agent是请求头中的一个字段,告诉服务器"我是谁"。默认Python请求的User-Agent会暴露你是程序,需要改成浏览器的。

import requests # 设置请求头,模拟Chrome浏览器 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } response = requests.get('https://www.example.com', headers=headers) print(response.status_code) # 更完整的请求头(更像真实浏览器) headers_full = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive' }

8.3 请求频率控制

爬得太快会被封IP。合理控制请求频率,既保护对方服务器,也保护自己的采集任务能持续运行。

import requests import time import random headers = {'User-Agent': 'Mozilla/5.0 ...'} for page in range(1, 11): url = f'https://example.com/list?page={page}' response = requests.get(url, headers=headers) # 解析数据... # 每次请求后暂停1-3秒(随机,更像真人) sleep_time = random.uniform(1, 3) time.sleep(sleep_time) print(f'第{page}页完成,暂停{sleep_time:.2f}秒') # 更友好的策略:遇到错误时多等一会 if response.status_code != 200: time.sleep(10) # 出错后等10秒再试

8.4 Robots协议

Robots协议是网站告诉爬虫"哪些页面可以爬,哪些不可以"的约定。文件位于网站根目录的robots.txt。遵守robots协议是爬虫的基本道德和法律要求。

# 查看网站的robots.txt # 直接在浏览器访问: https://目标网站.com/robots.txt # robots.txt 示例内容: # User-agent: * # 对所有爬虫生效 # Disallow: /admin/ # 禁止爬/admin/目录 # Disallow: /private/ # 禁止爬/private/目录 # Allow: /public/ # 允许爬/public/目录 # Crawl-delay: 5 # 每次请求间隔至少5秒 # Python读取robots.txt import requests robots = requests.get('https://www.example.com/robots.txt').text print(robots)

8.5 数据采集合规使用

采集数据不仅要技术可行,更要合法合规。以下红线不能碰: 1. 个人隐私:不采集姓名、身份证号、手机号、住址等敏感个人信息。 2. 商业秘密:不采集企业的内部数据、未公开的经营信息。 3. 著作权:采集的文章、图片等受版权保护的内容,不能商用。 4. 服务器压力:不能高频请求导致对方服务器瘫痪(可能构成破坏计算机信息系统罪)。 5. 用途正当:采集的数据用于正当的学习、研究、分析目的。

# 合规 checklist(写代码前先确认) # 1. 目标网站允许爬虫访问吗?→ 查看robots.txt # 2. 采集的是公开数据吗?→ 不碰登录后才能看的内部数据 # 3. 包含个人信息吗?→ 有则脱敏或放弃 # 4. 请求频率合理吗?→ 加延时,不高于正常用户浏览速度 # 5. 数据用途正当吗?→ 仅用于学习/分析,不用于非法竞争

自学拓展素材

  • 法律法规:《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》相关条款
  • 阅读材料:搜索"爬虫违法案例",了解真实判例(如顺丰数据泄露案)
  • 技术博客:搜索"反爬虫技术总结",了解更高级的反爬手段
  • 工具:robotparser模块(Python标准库,解析robots.txt)
  • 讨论:在班级群讨论"采集公开商品信息是否合法?"

自学自检小问题

  1. 常见的反爬机制有哪些?各举一个应对方法。
  2. User-Agent的作用是什么?为什么爬虫要设置它?
  3. robots.txt文件放在网站的哪个位置?它有什么法律效力?
  4. 采集数据时涉及个人隐私信息,应该怎么做?
  5. 如果一个网站robots.txt写了Disallow: /,你还能爬吗?为什么?
基础巩固层练习
0/5
第1题 选择题
robots.txt文件的主要作用是?
加速网页加载
告诉爬虫哪些页面可以访问
加密网站数据
记录用户访问日志
答案解析
robots.txt是网站告诉爬虫哪些页面可以访问、哪些不可以的约定文件。
第2题 选择题
爬虫设置User-Agent的主要目的是?
加快请求速度
模拟浏览器,绕过检测
压缩响应数据
缓存网页内容
答案解析
设置User-Agent是为了模拟真实浏览器发送请求,避免被网站识别为爬虫程序而拒绝访问。
第3题 选择题
以下哪种行为可能违反数据采集合规要求?
采集公开的商品价格信息用于学习
遵守robots协议,控制请求频率
采集用户的身份证号并出售
使用API获取授权数据
答案解析
采集并出售用户身份证号严重违反《个人信息保护法》,属于违法行为。
第4题 判断题
robots.txt具有法律强制力,违反会被判刑。
正确
错误
答案解析
robots.txt是行业约定,没有法律强制力。但违反它可能涉及其他法律问题(如侵犯著作权、非法获取计算机信息等)。
第5题 填空题
robots.txt文件应该放在网站的______目录下。
答案解析
robots.txt文件必须放在网站根目录下,即 https://目标网站.com/robots.txt。
0/0