第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)
- 讨论:在班级群讨论"采集公开商品信息是否合法?"
自学自检小问题
- 常见的反爬机制有哪些?各举一个应对方法。
- User-Agent的作用是什么?为什么爬虫要设置它?
- robots.txt文件放在网站的哪个位置?它有什么法律效力?
- 采集数据时涉及个人隐私信息,应该怎么做?
- 如果一个网站robots.txt写了Disallow: /,你还能爬吗?为什么?
基础巩固层练习
0/5
第1题
选择题
robots.txt文件的主要作用是?
答案解析
robots.txt是网站告诉爬虫哪些页面可以访问、哪些不可以的约定文件。
第2题
选择题
爬虫设置User-Agent的主要目的是?
答案解析
设置User-Agent是为了模拟真实浏览器发送请求,避免被网站识别为爬虫程序而拒绝访问。
第3题
选择题
以下哪种行为可能违反数据采集合规要求?
答案解析
采集并出售用户身份证号严重违反《个人信息保护法》,属于违法行为。
第4题
判断题
robots.txt具有法律强制力,违反会被判刑。
答案解析
robots.txt是行业约定,没有法律强制力。但违反它可能涉及其他法律问题(如侵犯著作权、非法获取计算机信息等)。
第5题
填空题
robots.txt文件应该放在网站的______目录下。
答案解析
robots.txt文件必须放在网站根目录下,即 https://目标网站.com/robots.txt。
0/0