如何降低代理带宽成本:将您的GB账单减少60-90%

在按GB计费的代理中,您的账单是以字节为单位,而不是请求——其中大多数字节是您从未解析的图像和字体。以下是如何剥离它们并将住宅GB账单减少一半以上的方法。

在按GB计费的代理中,您的账单是以字节为单位,而不是请求——令人不安的事实是,其中大多数字节是您从未解析的图像、字体和样式表。单个全分辨率产品照片可能为2.2 MB;一个页面的完整浏览器渲染为2-5 MB。您实际提取的精简HTML通常不到150 KB。剥离其余部分,住宅GB账单可减少60-90%。本指南是实用手册:阻止资产,跳过未更改的页面,压缩,并路由到JSON而不是HTML。

首先,了解您被收取的费用

住宅带宽是根据双向传输的数据总和来衡量的:请求头加请求体,以及响应头加响应体。这意味着每个页面拉取的资产——每个图像、字体和跟踪脚本——都会出现在您的账单上,即使它们没有为您的解析器提供任何数据。优化目标很简单:只下载您提取的字节。其他一切都是您支付的浪费。

在无头浏览器中阻止资产

如果您正在驱动浏览器,这是最大的杠杆。Playwright和Puppeteer都允许您拦截请求并中止不需要的资源类型。阻止图像、媒体、字体和样式表通常可以将页面重量减少大部分——DOM仍然构建,因此您的选择器和任何水合JSON仍然存在:

// Playwright: abort the resource types you never parse
await page.route('**/*', (route) => {
  const type = route.request().resourceType();
  if (['image', 'media', 'font', 'stylesheet'].includes(type)) {
    return route.abort();
  }
  return route.continue();
});
await page.goto(url, { waitUntil: 'domcontentloaded' });

两个注意事项:不要阻止承载您所需数据的XHR/fetch调用,并测试页面是否仍然呈现您所需的内容——过度阻止可能会破坏网站自身的逻辑。如果您在浏览器和普通请求之间权衡,我们对渲染与HTTP请求成本的分析显示了10-50倍的差距,使得这个决定变得重要。

网页抓取的带宽统计:2.2 MB的图像,每次完整渲染2-5 MB,150 KB的精简HTML,以及60-90%的账单削减
您支付的是整个页面,但只解析其中的一小部分——阻止资产是可用的最便宜的大胜利。

跳过未更改的页面

最便宜的字节是您不下载的字节。两种技术可以减少监控作业中的重新获取浪费。HEAD请求仅提取头以检查Content-LengthLast-Modified,然后再提交完整的GET。更好的是,条件GET发送上次的ETag或时间戳,当没有变化时,服务器以304 Not Modified和空体响应——您只需支付几个头字节,而不是整个页面:

import requests

# conditional GET: 304 = near-zero bytes when unchanged
headers = {"If-None-Match": last_etag,
           "If-Modified-Since": last_seen}
r = requests.get(url, headers=headers, proxies=proxies, timeout=20)

if r.status_code == 304:
    pass  # unchanged, no body downloaded, no GB spent
else:
    process(r.content)
    last_etag = r.headers.get("ETag")

对于每天重新检查相同页面的抓取器,仅条件GET就可以显著减少带宽,因为大多数页面在运行之间不会更改。

始终接受压缩

文本压缩效果很好——HTML、JSON和CSS通过gzip或brotli可以缩小70-90%——您按实际跨线的压缩大小计费。在Python的requests中,这在默认情况下是开启的;在原始客户端中,请明确要求:

headers = {"Accept-Encoding": "gzip, deflate, br"}
r = requests.get(url, headers=headers, proxies=proxies, timeout=20)
# requests transparently decompresses; you're billed on the small size

路由到JSON,而不是HTML

最大的结构性胜利是完全跳过渲染页面。许多网站从JSON端点获取相同数据,只需很少的字节——产品的价格和库存作为10 KB的API响应,而不是3 MB的渲染页面。在浏览器的网络选项卡中找到XHR调用并直接访问它。Shopify商店是经典示例:products.json端点将整个目录交给您,没有任何HTML。当您可以读取API时,请这样做——这是每条记录从千字节到兆字节的区别。

让API为您计算字节

如果您不想为每个网站手动调整阻止规则,Scraper API仅在需要时渲染并返回解析的markdown或JSON,为您剥离资产——您收到的是提取的内容,而不是其来源的兆字节。在按GB计费的住宅代理中,节省是直接的:线上字节越少,账单上的美元越少,而您保留的数据没有任何损失。有关千兆字节实际购买的完整图景,请参阅我们对每GB定价的分析。

抓取时要阻止的资源清单(图像、CSS、字体、媒体、广告)与要保留的资源(HTML、JSON、XHR数据)
阻止计费但未使用的资源;保留承载实际数据的HTML、JSON和XHR端点。

在按GB计费的住宅代理上更精简地抓取

常见问题解答

代理带宽如何计算?

通过双向传输的总字节数:请求头加请求体,以及响应头加响应体。因此,每个页面加载的图像、字体和脚本都计入您的使用量,而不仅仅是您解析的HTML。这就是为什么阻止未使用的资产和跳过未更改的页面直接转化为按GB计费计划上的较低账单的原因。

阻止图像会破坏抓取吗?

如果您小心的话,不会。阻止图像、媒体、字体和样式表会保留DOM和JavaScript,因此您的选择器和任何水合JSON仍然有效——您只是跳过了视觉负载。风险在于过度阻止:绝不要中止承载您数据的XHR/fetch调用,并在大规模运行之前测试页面是否仍然生成您所需的内容。

最大的带宽节省是什么?

路由到JSON端点而不是渲染完整页面,这是存在的地方。10 KB的API响应可以替代3 MB的渲染以获得相同的记录——减少99%。在那之后,在无头浏览器中阻止资产和在重新抓取时使用条件GET是最大的胜利。压缩几乎是免费的,应该始终开启。

我可以实际节省多少?

阻止资产通常可以将渲染页面的重量减少一半以上;条件GET可以将不变页面的重新抓取带宽减少到接近零;从HTML切换到JSON路由通常可以减少每条记录90%以上。结合在一起,对住宅GB账单减少60-90%是大多数项目的现实目标。

这些都不会改变您提取的内容——它改变的是您为提取它所支付的费用。阻止您从未读取的资产,跳过未移动的页面,接受压缩,并优先选择JSON路由而不是完整渲染。在按GB计费的代理上,这四个习惯通常会将账单降低一半以上。有关如何在数百万页面上扩展的架构,请参阅我们的大规模抓取架构指南

获取解析内容而没有浪费的字节