← 返回首页

Python爬虫遇到403:先分清原因,再决定要不要用动态住宅代理

更新:2026年9月8日

Python数据采集遇到403时,最差的处理方式是立刻无限换IP。一个稳定的采集系统,通常先解决权限、频率、缓存、会话和重试,最后才决定是否需要动态住宅代理。

403先分成4类原因

类型典型原因优先动作
访问权限站点不允许自动访问、需认证查看API、robots与服务条款
请求行为频率过高、并发过大限速、队列、指数退避
会话问题Cookie / Session不完整复用会话,减少无意义重建
网络出口共享出口质量差、地域测试需求在合规前提下测试代理

先把基础请求写稳

import time
import requests

session = requests.Session()
session.headers.update({"User-Agent": "Mozilla/5.0"})

url = "https://example.com/public-data"
for attempt in range(3):
    response = session.get(url, timeout=20)
    if response.status_code == 200:
        print(response.text[:200])
        break
    time.sleep(2 ** attempt)

这段代码解决不了所有403,但它体现了三个原则:复用Session、设置超时、失败后退避。比“失败就立即重试100次”更可控。

代理应该放在系统的哪一层

代理只是网络出口层。更完整的采集结构应该是:

  1. 任务队列控制抓取顺序;
  2. 并发上限控制负载;
  3. 缓存和去重减少重复下载;
  4. 重试策略避免失败风暴;
  5. 最后才由代理池处理地域测试或出口分散。

什么时候动态住宅代理才真正划算

当你有权采集目标数据,并且已经优先使用API、限速和缓存,但仍需要大量不同地区的公开数据请求时,动态住宅代理才更匹配。按流量计费时,应避免无意义下载图片、视频和字体。

不要比较“$/GB”,要比较成功结果成本

更实用的KPI:每1000个成功请求成本 =(代理流量费用 + 重试带来的额外流量 + 计算成本)÷ 成功请求数 × 1000。

一个标价更低但失败率高、需要大量重试的套餐,最终可能更贵。

上线前检查表

选购建议:拿同一批公开URL做小规模测试,记录成功率、平均流量和延迟,再决定供应商,而不是只看IP池数字。

想进一步比较动态住宅套餐,可以看Webshare动态住宅代理选型方法

对比适合数据采集的动态代理 →