针对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} 失效,自动切换")


技巧三:请求行为人性化

关键参数:

  1. 随机延时:避免固定频率请求
    import time
    time.sleep(random.uniform(1.0, 3.0))  # 随机等待1~3秒
    

  2. 会话保持:复用cookies
    session = requests.Session()
    session.get(login_url)  # 首次获取cookies
    response = session.get(target_url)  # 自动携带cookies
    

  3. 页面滚动模拟(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())")
    

重要原则

  1. 遵守robots.txt协议,控制爬取频率
  2. 设置异常重试机制
  3. 添加try-except模块处理网络波动
  4. 关键数据持久化存储,避免重复请求

通过组合使用这些技术,可显著降低被封风险,同时建议优先使用网站官方API接口。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐