You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

爬虫遭遇Rate Limit限制?已试多种方法仍失败求解决方案

爬虫Rate Limit问题求助

爬取一批仅CODE参数不同的网页(共约1000个CODE),但爬取约100个后就触发网站的Rate Limit限制,已尝试以下方法均无效:

已尝试的无效方法

1. 设置固定浏览器User-Agent请求头

代码如下:

data = requests.get(url,headers=headers)
for code in codes:
    url=url_partido.format(code)
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
    
    data = requests.get(url,headers=headers)
    with open("nbadata/games22/{}.html".format(code),"w+") as f:
        f.write(data.text)

2. 添加固定时长的time.sleep(1)降低请求频率

3. 使用固定代理服务器列表切换IP

代码如下:

servers = ['95.216.194.46:1081', '45.174.87.18:999', ' 45.6.4.60:8080']
for code in codes:
    for server in servers:
        try:
            url = url_partido.format(code).replace('{server}', server)
            headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
            data = requests.get(url,headers=headers)
            with open("nbadata/games22/{}.html".format(code),"w+") as f:
                f.write(data.text)
            break
        except Exception as e:
            print(f"Error {url}: {e}")
            continue

问题分析与解决思路

现有操作的问题

  1. UA单一固定:全程用同一个User-Agent,网站很容易识别出爬虫身份,进而针对该UA做频率限制。
  2. 请求间隔规律化:固定1秒的间隔过于机械,真实用户的访问间隔不会如此规整,容易被反爬机制捕捉。
  3. 代理使用错误:
    • 代理列表仅3个,数量太少,轮用几次就会被网站标记;
    • 代码中错误地将代理地址替换到URL里,根本没起到代理IP的作用,正确做法是通过requests的proxies参数设置代理;
    • 公开免费代理大概率已经被网站拉黑,稳定性和可用性极低。

可行解决思路

  1. 随机切换UA:准备多组不同浏览器、设备的User-Agent,每次请求随机选取一个。可以手动维护UA列表,或者用工具库自动生成:

    import random
    ua_list = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15',
        # 更多UA...
    ]
    headers = {'User-Agent': random.choice(ua_list)}
    
  2. 随机化请求间隔:用随机时长替代固定sleep,比如设置1-5秒的随机间隔,模拟真实用户的访问节奏:

    import time
    import random
    time.sleep(random.uniform(1, 5))
    
  3. 正确使用代理:

    • 更换高质量代理池,优先选择付费代理服务,或使用代理API自动获取可用代理;
    • 修正代理设置代码,通过proxies参数传递:
      proxies = {
          "http": f"http://{server}",
          "https": f"http://{server}"
      }
      data = requests.get(url, headers=headers, proxies=proxies)
      
    • 每次请求随机从代理池选取,避免顺序轮用的规律被识别。
  4. 处理Rate Limit状态码:当收到429响应时,采用指数退避策略重试,比如第一次等5秒,第二次10秒,第三次20秒,直到请求成功,同时暂时禁用当前IP/UA。

  5. 模拟真实浏览器行为:如果requests效果不佳,改用selenium或playwright模拟浏览器操作,配合随机UA、代理和动作间隔(比如滚动页面、随机延迟),更难被反爬机制识别。

内容的提问来源于stack exchange,提问作者MVS99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:10:43