《Python 爬虫总是被封?3 个反爬技巧轻松绕过》
·
针对Python爬虫被封问题,以下三个核心反爬技巧可有效提升稳定性(附代码示例):
技巧一:动态请求头模拟
网站通过User-Agent等头部特征识别爬虫,需动态生成真实浏览器指纹:
import random
import requests
headers = {
"User-Agent": random.choice([
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5) AppleWebKit/605.1.15..."
]),
"Accept-Language": "zh-CN,zh;q=0.9",
"Referer": "https://www.google.com/"
}
response = requests.get(url, headers=headers)
技巧二:IP代理池轮询
使用代理IP分散请求,避免单一IP被封:
from itertools import cycle
proxy_pool = cycle(['111.222.333.444:8000', '555.666.777.888:8080'])
for _ in range(10):
proxy = next(proxy_pool)
try:
response = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=5)
break
except:
print(f"代理 {proxy} 失效,自动切换")
技巧三:请求行为人性化
关键参数:
- 随机延时:避免固定频率请求
import time time.sleep(random.uniform(1.0, 3.0)) # 随机等待1~3秒 - 会话保持:复用cookies
session = requests.Session() session.get(login_url) # 首次获取cookies response = session.get(target_url) # 自动携带cookies - 页面滚动模拟(Selenium方案):
from selenium.webdriver import Chrome driver = Chrome() driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 等待加载
进阶策略
- 验证码处理:集成OCR工具(如Tesseract)或第三方打码平台
- 动态渲染应对:对SPA页面使用Selenium/Puppeteer
- Honeypot陷阱规避:禁用CSS隐藏链接的点击
driver.execute_script("document.querySelectorAll('a[style*=hidden]').forEach(e=>e.remove())")
重要原则:
- 遵守
robots.txt协议,控制爬取频率- 设置异常重试机制
- 添加
try-except模块处理网络波动- 关键数据持久化存储,避免重复请求
通过组合使用这些技术,可显著降低被封风险,同时建议优先使用网站官方API接口。
更多推荐

所有评论(0)