← 返回博客

Wildberries和Ozon爬虫流量限制:如何在一夜之间不浪费一个月的代理套餐

我们分析了为什么解析器可能在几小时内消耗一个月的流量,并展示了如何在代理、反检测浏览器和脚本层面设置限制。

📅2026年10月20日

卖家在晚上启动竞争对手价格爬虫,早上收到通知:流量已用完, 套餐已消耗 90%。这个情况熟悉吗?通常不是爬虫本身的问题,而是 在代理和脚本层面缺乏限制。在本文中,我们将讨论流量是如何“流失”的, 以及如何设置保护措施,以确保居民或移动代理的月套餐能够持续到 计算周期结束。

为什么流量在一夜之间耗尽

爬取 Wildberries、Ozon 或 Avito 看起来是一个简单的任务:发送请求 — 收到包含 价格的 JSON。但实际上,流量不仅仅用于获取有用的数据。主要的超支来源有:

  • 加载图像和媒体。 如果爬虫通过浏览器完全打开商品页面(而不是直接向 API 发出请求),它会自动加载图片、视频、 横幅 — 每个商品卡片可能会消耗数十兆字节。
  • 由于验证码和封锁而重复请求。 市场识别到机器人,发出验证码或临时封锁 IP,脚本进行重复请求 — 流量白白浪费, 数据却无法到达。
  • 缺乏请求缓存。 如果没有“这个小时已经爬取过 — 不再重复”的逻辑,脚本可能会在一夜之间多次询问同一商品卡片。
  • 没有限制的并行流。 同时启动 50-100 个流看似加快了工作速度,但流量消耗的速度比预期快得多, 而部分请求则被封锁。
  • 错误选择代理类型。 居民和移动代理通常按流量(GB)收费,而数据中心代理则通常按 IP 数量或租用时间收费。如果爬虫设置在没有控制的居民池上 — 限制会很快耗尽。

这些因素的组合导致原本计划一个月工作的脚本在一次夜间爬取 10-20 千个商品卡片时就耗尽了流量套餐。

不同类型代理的流量计算方式

在设置限制之前,重要的是要了解您到底在为什么付费。不同类型的代理在计算消耗时各有不同, 这直接影响节省策略。

代理类型 计费方式 超支风险 何时使用
居民代理 按流量(GB)计费 无限制时高风险 绕过市场的反机器人保护进行爬取
移动代理 按流量或时间计费 高风险,流量更贵 爬取网站的移动版本,绕过严格的封锁
数据中心代理 按 IP 数量 / 租用时间计费 低风险,流量通常无限制 没有严格反机器人保护的大规模爬取

如果您在爬取 Wildberries 或 Ozon,这里积极使用反机器人保护,几乎总是需要居民或 移动 IP — 数据中心地址很快就会被封锁。但正因为按流量计费,这里特别重要的是提前设置限制。

爬虫实际需要多少流量

为了设置合理的限制,需要基于实际数字,而不是感觉。 实际的费用大致如下:

  • 商品卡片的 API 请求(JSON,无图片): 每个卡片 5-30 KB。 对于 10,000 个卡片 — 大约 50-300 MB。
  • 通过无头浏览器加载商品页面(带图片): 每个卡片 1-3 MB。 对于同样的 10,000 个卡片 — 10-30 GB。
  • 每小时监控 1000 SKU 的价格: 在简化请求的情况下 — 每天大约 1-5 GB,完全加载页面时 — 每天 50-100 GB。

“轻量级”和“重量级”爬虫之间的差异是数十倍。因此,节省流量的第一步是 关闭图像、视频和外部脚本的加载,在可能的情况下直接与市场的 API 或 移动版本网站进行交互,因为后者的体积小于桌面版。

反检测浏览器和代理管理器中的限制

对于通过反检测浏览器(例如,Dolphin Anty、AdsPower、Multilogin、 GoLogin、Octo Browser)或自有代理管理器进行爬取的用户,限制消耗的最简单方法是 在代理提供商的配置文件和账户层面设置限制。

  1. 登录代理提供商的个人账户,找到流量管理或子用户/端口限制的部分。
  2. 为爬虫创建单独的子账户或端口 — 不要使用与 Instagram 或 TikTok 的账户农场相同的代理池。按任务进行分隔可以立即显示流量的去向。
  3. 在此子账户上设置每日或每小时的流量限制 — 例如,每天 5 GB,而不是在一次会话中消耗整个月套餐。
  4. 在反检测浏览器中关闭图像的自动加载,对于仅用于数据收集而非视觉浏览页面的配置文件。
  5. 设置配置文件的启动计划,使爬取不是一次长时间的会话,而是短时间的间隔和暂停 — 这降低了封锁的风险,并提供了在启动之间跟踪流量消耗的时间。

这种方法对于同时进行多个市场爬取的代理机构和自由职业者尤为重要:如果没有按子账户进行分隔,很难理解具体哪个项目“消耗”了流量。

脚本和 API 层面的流量限制

如果爬虫是用 Python 或 Node.js 自行编写的,可以直接在代码中嵌入限制 — 这比代理提供商的界面设置提供了更精确的控制。

以下是使用 requests 的 Python 简单流量计数器示例:

import requests

MAX_BYTES_PER_DAY = 5 * 1024 * 1024 * 1024  # 每天限制 5 GB
used_bytes = 0

proxies = {
    "http": "http://user:pass@proxy_host:port",
    "https": "http://user:pass@proxy_host:port",
}

def safe_get(url):
    global used_bytes
    if used_bytes >= MAX_BYTES_PER_DAY:
        raise RuntimeError("每日流量限制已用尽,爬取已停止")

    response = requests.get(url, proxies=proxies, timeout=10)
    used_bytes += len(response.content)
    return response

# 示例调用
resp = safe_get("https://card.wb.ru/cards/detail?nm=123456")
print("已使用流量:", round(used_bytes / 1024 / 1024, 2), "MB")

逻辑很简单:脚本计算每个响应的字节数,并在达到设定限制时停止。这可以防止因循环错误或无限重复请求而导致脚本在几个小时内“消耗”一个月的流量套餐。

另外,建议添加:

  • 在错误时使用指数延迟(retry with backoff) — 在出现验证码或封锁时,脚本等待逐渐增加的间隔(5 秒、15 秒、60 秒), 这减少了无用请求的数量。
  • 限制并行流的数量 — 例如,不超过 10-20 个同时连接通过代理池,以避免引发封锁并浪费流量。
  • 在无头浏览器中禁用资源加载 — 如果通过 Selenium 或 Puppeteer 进行爬取,可以在浏览器设置中阻止加载图片、字体和 CSS,只保留 HTML/JSON 响应。

实时流量监控

没有监控的限制效果较差,因为您只能在脚本停止后才知道问题。为了实时控制消耗:

  • 在代理提供商的个人账户中启用流量达到 50%、80% 和 100% 的通知 — 大多数服务支持通过电子邮件或 Telegram 发送此类警报。
  • 在脚本中记录简单的日志:按小时记录流量到文件或数据库,以便查看消耗峰值并快速找到问题源。
  • 通过单独的子账户或标签将流量按任务分隔 — Wildberries 的爬取、Ozon 的爬取、Avito 的爬取分开。这简化了分析哪个项目消耗最多。
  • 将消耗与预期的数据量进行对比:如果 10,000 个卡片消耗了 20 GB 而不是预期的 300 MB,那就意味着某处加载了多余的资源或进行了重复请求。

流量预算控制检查清单

  • 在用于爬取的配置文件中禁用图像和视频的自动加载
  • 在可能的情况下使用直接请求市场的 API,而不是完全加载页面
  • 在代理的子账户上设置每日或每小时的流量限制
  • 根据项目(Wildberries、Ozon、Avito)将爬取分为单独的代理池
  • 在脚本中实现流量计数器,并在达到限制时停止
  • 在验证码或封锁时设置延迟和回退,而不是立即重试
  • 限制爬取的并行流数量
  • 启用代理提供商的流量消耗通知
  • 按小时记录流量消耗以分析异常

新手常见错误

实际上,大多数“烧掉”的流量套餐都可以归因于几种典型错误:

  • 在没有限制的情况下“无监督”地启动爬虫。 脚本连续运行 8-10 小时,如果某处出现重复请求的循环,流量会持续消耗到早上。
  • 所有任务使用一个公共代理池。 Instagram 的账户农场、Facebook Ads 的广告测试和 Ozon 的爬取使用相同的流量 — 无法理解究竟是什么在消耗它。
  • 忽视验证码。 当出现验证码的初步迹象时,脚本没有降低请求频率,而是继续以相同的强度攻击网站,浪费流量在无用的错误响应上。
  • 在数据中心代理足够的情况下选择居民代理。 如果市场没有严格封锁数据中心 IP,支付居民池的流量费用是没有必要的 — 对于保护较少的目标,使用 数据中心代理 更为合适。
  • 缺乏测试运行。 在对数千个卡片进行全面爬取之前,应该在 50-100 个卡片上运行脚本并测量实际流量消耗,以便对整个量进行外推。

结论

爬虫的流量“烧掉”并不是因为数据量,而是因为缺乏控制:多余的图片、在封锁时的重复请求、没有限制的并行流以及所有任务共享的代理池。解决方案是将流量按项目分隔,在代理账户层面设置每日限制,将流量计数器嵌入脚本本身,并在流量套餐真正耗尽之前设置监控和通知。

如果您在爬取像 Wildberries 或 Ozon 这样的市场,建议使用 居民代理 来绕过封锁,并额外使用 移动 IP 来处理对反机器人保护最敏感的场景 — 但在这两种情况下,务必提前设置流量限制,以免月套餐在一次夜间会话中耗尽。