本文目录导读:

- 伪造请求头(最基本的伪装)
- 控制请求频率(最有效的反封策略)
- 使用代理IP(突破IP级封禁)
- 处理Cookies和Session(避免被“记住”)
- 抓取内容的“痕迹”处理(应对反爬JS验证)
- 处理验证码(最头疼的问题)
- 模拟鼠标和键盘操作(破解行为分析)
- 使用专业的反爬绕过库(一键集成)
- 总结:一套可执行的“反封”流程
- 最终建议
防止爬虫被封禁的核心原则是模拟真实用户行为,而不是让服务器觉得你在“扫荡”,以下是Python爬虫开发中常用的8个实战策略,从基础到进阶:
伪造请求头(最基本的伪装)
原因:服务器会检测 User-Agent、Referer 等字段,Python的 requests 默认UA会被一眼识别。
代码:
import requests
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',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,en;q=0.6',
'Referer': 'https://www.google.com/', # 模拟从搜索引擎跳转
'Connection': 'keep-alive',
}
进阶技巧:维护一个UA池,每次随机选择一个,避免单一UA被拉黑。
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...',
'Mozilla/5.0 (X11; Linux x86_64) ...',
]
headers['User-Agent'] = random.choice(user_agents)
控制请求频率(最有效的反封策略)
原因:瞬时大量请求会触发服务器的限流机制(如429 Too Many Requests)。
代码:
import time import random # 每个请求之间随机休眠1~3秒 time.sleep(random.uniform(1, 3))
高级做法:使用指数退避(Exponential Backoff),遇错时暂停时间递增:
def request_with_retry(url, max_retries=3):
for i in range(max_retries):
try:
return requests.get(url, headers=headers, timeout=5)
except Exception as e:
wait = (2 ** i) + random.random()
time.sleep(wait)
continue
使用代理IP(突破IP级封禁)
原因:同IP多次请求容易被封,尤其对于反爬严格的网站。
代码:
import requests
proxy = {
'http': 'http://10.10.1.10:3128', # 这种通常需要购买付费代理
'https': 'http://10.10.1.10:1080',
}
# 付费代理池(如快代理、芝麻代理)会自动轮换IP
response = requests.get('https://example.com', proxies=proxy, headers=headers)
实战建议:直接使用付费代理API会更省心,免费代理不稳定且易被污染。
处理Cookies和Session(避免被“)
原因:有些网站会根据Cookie跟踪你的行为,如果第一次请求没有Cookie,第二次突然换了,可能会被标记。
做法:使用 requests.Session() 自动管理Cookie。
session = requests.Session()
# 先访问首页获取Cookie
session.get('https://example.com', headers=headers)
# 后续请求会自动携带Cookie
response = session.get('https://example.com/data', headers=headers)
的“痕迹”处理(应对反爬JS验证)
原因:部分网站会检测浏览器是否运行了JavaScript(如加密参数、鼠标轨迹)。
工具:
- Selenium / Playwright:模拟真实浏览器环境,但速度慢且耗资源。
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') driver.implicitly_wait(5) # 等待页面JS渲染 - DrissionPage:结合requests速度和selenium功能,更轻量。
处理验证码(最头疼的问题)
方案优先级:
- 绕过:使用
adblock插件拦截验证码脚本(如Cloudflare的turnstile)。 - 识别:使用
pytesseract(简单图形验证码)或付费打码平台(如超级鹰)。 - 人工介入:当概率低时,保留失败请求,等待人工处理。
模拟鼠标和键盘操作(破解行为分析)
场景:网站检测“点击频率”、“滚动速度”。
Selenium 模拟:
from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.move_to_element(element).perform() # 悬停 actions.click().perform()
使用专业的反爬绕过库(一键集成)
GitHub 经典项目:
- fake-useragent:自动生成随机、真实的User-Agent
from fake_useragent import UserAgent ua = UserAgent() headers = {'User-Agent': ua.random} - requests-html:支持解析JavaScript,比纯requests更方便
- cloudscraper:专门绕过Cloudflare的防护
import cloudscraper scraper = cloudscraper.create_scraper() response = scraper.get('https://site-protected-by-cloudflare.com')
一套可执行的“反封”流程
import time
import random
import requests
from fake_useragent import UserAgent
ua = UserAgent()
session = requests.Session()
# 配置代理(可选)
proxies = {'http': 'http://your_proxy:port'}
def safe_request(url, retries=3):
for i in range(retries): # 重试机制
try:
# 1. 随机UA
headers = {'User-Agent': ua.random}
# 2. 模拟浏览器常见附加头
headers['Accept-Language'] = 'en-US,en;q=0.9'
# 3. 使用Session保持Cookie
response = session.get(url, headers=headers, proxies=proxies, timeout=10)
# 4. 检测状态码
if response.status_code == 200:
return response
elif response.status_code == 429: # 请求过多
wait = 2 ** i + random.random()
time.sleep(wait)
else:
time.sleep(2)
except Exception as e:
time.sleep(3)
return None
# 5. 每个请求间随机延迟
time.sleep(random.uniform(1, 3))
data = safe_request('https://example.com')
最终建议
- 先观察再动手:抓包分析网站的反爬机制(如Cookie有效期、AJAX请求参数)。
- 尊重robots.txt:纯道德层面,但很多网站会据此封IP。
- 优先选择API接口:如果网站有官方API,优先使用,这是最合法的方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播