以下是一份较为详细的 Python 反爬思路总结,涵盖了常见的反爬策略及其应对方法。请注意,反爬虫技术应在合法合规的前提下使用,尊重目标网站的 robots.txt 协议和相关法律法规。
一、常见反爬策略
1. 基于用户行为的检测
• 请求频率限制:短时间内大量请求可能被识别为爬虫。
• 鼠标移动和点击模式:有些网站通过 JavaScript 监听用户的鼠标移动、点击等行为。
• 页面停留时间:过短的页面停留时间可能被怀疑为爬虫。
2. 基于请求头的检测
• 缺少或异常的 User-Agent:未设置或使用默认的 User-Agent 可能被识别为爬虫。
• 缺少 Referer:某些网站会检查请求的来源页面。
• 其他自定义头部:如 X-Requested-With
等。
3. 基于 Cookie 和 Session 的检测
• 缺少必要的 Cookie:有些网站依赖 Cookie 来验证用户身份或会话状态。
• Cookie 过期或无效:动态变化的 Cookie 需要及时更新。
4. 基于 JavaScript 的检测
• 动态内容加载:通过 AJAX 或前端框架动态加载的数据,直接请求 HTML 可能无法获取完整数据。
• JavaScript 渲染:部分内容需要通过执行 JavaScript 才能显示。
• 验证码:在检测到可疑行为时,弹出验证码要求用户验证。
5. 基于 IP 的检测
• IP 封禁:频繁请求的 IP 可能被暂时或永久封禁。
• IP 地址信誉:使用代理池中的 IP 若被标记为恶意,也可能被封禁。
6. 基于验证码的防护
• 图形验证码:需要人工识别,增加爬取难度。
• 滑动验证码:需要模拟人类的滑动行为。
• 行为验证码:如 Google reCAPTCHA。
7. 其他技术手段
• 请求参数加密:参数经过复杂的加密算法处理,难以直接伪造。
• 请求签名:需要对请求参数进行签名验证。
• WebAssembly:使用 WebAssembly 执行复杂的逻辑,增加逆向难度。
二、应对反爬的策略
1. 合理设置请求头
• User-Agent:使用常见浏览器的 User-Agent,避免使用默认的爬虫 User-Agent。可以通过随机选择不同的 User-Agent 来模拟不同用户。
• Referer:设置合理的 Referer,模拟从合法页面跳转过来的请求。
• 其他头部:根据目标网站需要,添加 Accept-Language
、Connection
等头部信息。
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
'Referer': 'https://www.example.com/',
# 其他必要的头部
}
response = requests.get('https://www.example.com/data', headers=headers)
2. 控制请求频率
• 设置延时:在连续请求之间添加随机延时,模拟人类浏览行为。
• 分布式爬取:使用多个 IP 和多个爬虫实例分散请求压力。
import time
import random
for url in urls:
response = requests.get(url, headers=headers)
# 处理响应
time.sleep(random.uniform(1, 3)) # 随机延时1到3秒
3. 处理 Cookies 和 Session
• 维护会话:使用 requests.Session()
来保持会话,自动处理 Cookies。
• 动态获取 Cookies:有些网站会在首次访问时生成 Cookies,需先请求特定页面获取。
session = requests.Session()
login_url = 'https://www.example.com/login'
login_data = {
'username': 'your_username',
'password': 'your_password'
}
session.post(login_url