Python 爬虫入门 Day 6 - 反爬虫应对策略 Headers / Cookies 模拟请求
Python 第二阶段 - 爬虫入门
🎯 今日目标
- 理解常见反爬虫机制
- 掌握 Headers / Cookies 设置
- 学会使用
requests.Session()
保持登录状态 - 初步体验验证码处理和 User-Agent 伪装
📘 学习内容详解
✅ 1. 常见反爬机制有哪些?
类型 | 说明 | 应对方式 |
---|---|---|
UA 检测 | 拒绝非浏览器请求 | 设置 User-Agent |
Referer 检测 | 限定来源页面 | 添加 Referer |
Cookies 检测 | 检查登录状态 | 使用 requests.Session() |
JavaScript 动态渲染 | 页面数据不在源代码中 | Selenium / Playwright |
滑块验证码 | 图形验证阻止爬虫 | OCR、打码平台 |
频率限制 / IP封锁 | 请求频繁导致封禁 | 加延迟 / IP代理池 |
✅ 2. 设置请求头 headers(模拟浏览器)
headers = {"User-Agent": "Mozilla/5.0","Referer": "https://quotes.toscrape.com"
}
response = requests.get(url, headers=headers)
✅ 3. 使用 requests.Session() 保持会话(模拟登录)
import requestssession = requests.Session()# 第一步:登录表单提交
login_url = "http://httpbin.org/post" # 示例用
data = {"username": "test", "password": "123456"}
session.post(login_url, data=data)# 第二步:访问登录后的页面
resp = session.get("http://httpbin.org/cookies")
print(resp.text)
多数登录站点都依赖 Cookie、Token,Session 自动帮你管理。
✅ 4. 检查响应状态、调试技巧
res = requests.get(url)
print(res.status_code)
print(res.headers)
print(res.cookies)
💻 今日练习任务
-
模拟一个表单登录(可使用 httpbin.org)
-
抓取并打印 cookies 信息
-
修改 headers 中的 UA,观察服务器响应变化
-
尝试添加
referer
和 headers 伪装成浏览器访问 quotes.toscrape.comimport requests# 创建 Session(用于保持登录状态和 Cookies) session = requests.Session()# ========== 1. 模拟一个表单登录(使用 httpbin.org) ========== login_url = "https://httpbin.org/post" login_data = {"username": "test_user","password": "123456" } login_response = session.post(login_url, data=login_data)print("=== 模拟登录响应内容 ===") print(login_response.json()) # httpbin.org 会原样返回你提交的数据# ========== 2. 抓取并打印 cookies 信息 ========== # 先设置一些 Cookies(模拟服务器设置) session.cookies.set("sessionid", "abc123456", domain="httpbin.org")# 获取并打印当前 Cookies cookies_response = session.get("https://httpbin.org/cookies") print("\n=== 当前 Cookies ===") print(cookies_response.json()) # 返回 {"cookies": {"sessionid": "..."}}# ========== 3. 修改 headers 中的 User-Agent ========== headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0", } ua_response = session.get("https://httpbin.org/user-agent", headers=headers) print("\n=== 当前 User-Agent ===") print(ua_response.json())# ========== 4. 添加 referer 和 UA,伪装访问 quotes.toscrape.com ========== quotes_url = "https://quotes.toscrape.com/page/1/"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36","Referer": "https://www.google.com" } quotes_response = session.get(quotes_url, headers=headers)print("\n=== 模拟浏览器访问 quotes.toscrape.com 状态码 ===") print(quotes_response.status_code)# 如果成功,打印前500个字符(页面 HTML) if quotes_response.status_code == 200:print("\n页面前500字符预览:")print(quotes_response.text[:500])
🧪 示例:模拟访问 quotes.toscrape.com 登录页
from bs4 import BeautifulSoupsession = requests.Session()
login_page = session.get("https://quotes.toscrape.com/login")
soup = BeautifulSoup(login_page.text, "html.parser")
csrf_token = soup.find("input", {"name": "csrf_token"}).get("value")# 模拟登录
payload = {"username": "test","password": "test","csrf_token": csrf_token
}
response = session.post("https://quotes.toscrape.com/login", data=payload)
print("登录是否成功:", "Logout" in response.text)
✍️ 今日总结
- 了解了反爬虫的主要手段及对应策略
- 掌握了 UA、Referer、Cookies 设置技巧
- 学会使用
requests.Session()
保持登录状态 - 为后续模拟更复杂登录和 JS 渲染页面打下基础