# Как сократить расходы на трафик прокси: уменьшите счет за гигабайты на 60-90%

На прокси с оплатой за гигабайт ваш счет выставляется за байты, а не за запросы — и большинство этих байтов составляют изображения и шрифты, которые вы никогда не обрабатываете. Вот как их удалить и сократить счет за резидентные гигабайты более чем наполовину.

На прокси с оплатой за гигабайт ваш счет выставляется за байты, а не за запросы — и неприятная правда заключается в том, что большинство этих байтов составляют изображения, шрифты и стили, которые вы никогда не обрабатываете. Одно полноразмерное фото продукта может весить 2,2 МБ; полная отрисовка страницы в браузере занимает 2-5 МБ. Легкий HTML, из которого вы фактически извлекаете данные, часто составляет менее 150 КБ. Удалите остальное, и счет за резидентные гигабайты уменьшится на 60-90%. Это руководство — практическое руководство: блокируйте ресурсы, пропускайте неизмененные страницы, сжимайте и переходите на JSON вместо HTML.

## Сначала узнайте, за что вам выставляют счет

Резидентный трафик измеряется по сумме данных, переданных в обоих направлениях: заголовки запроса плюс тело запроса и заголовки ответа плюс тело ответа. Это означает, что каждый ресурс, который загружает страница — каждое изображение, шрифт и скрипт отслеживания — попадает в ваш счет, даже если ни один из них не используется вашим парсером. Цель оптимизации проста: загружайте только те байты, из которых вы извлекаете данные. Все остальное — это трата, за которую вы платите.

## Блокируйте ресурсы в безголовом браузере

Если вы управляете браузером, это самый значительный рычаг. Playwright и Puppeteer позволяют перехватывать запросы и отменять загрузку типов ресурсов, которые вам не нужны. Блокировка изображений, медиа, шрифтов и стилей обычно сокращает вес страницы на большую часть — DOM все еще строится, поэтому ваши селекторы и любой JSON для гидратации остаются:

```js
// 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-запросов](https://quantumproxies.io/blog/headless-browser-vs-http-requests-cost) показывает разрыв в 10-50 раз, который делает это решение важным.

![Страница товара так, как ее тарифицирует прокси: фото в полном разрешении на 2,2 МБ и окружающие его шрифты, стили и скрипты против легкого HTML, который вы на самом деле разбираете, часто меньше 150 КБ. Карточка перечисляет веса: 2-5 МБ на полную отрисовку в браузере и счет на 60-90% меньше после блокировки ресурсов.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335198/blog/generated/qp-b9-068-diag1.png)
*Вы платите за всю страницу, но обрабатываете лишь ее часть — блокировка ресурсов является самым дешевым крупным выигрышем.*

## Пропускайте страницы, которые не изменились

Самый дешевый байт — это тот, который вы не загружаете. Два метода сокращают потери на повторных запросах в мониторинговых задачах. Запрос HEAD загружает только заголовки, чтобы проверить `Content-Length` или `Last-Modified` перед полным GET-запросом. Лучше, условный GET отправляет ETag или временную метку с последнего раза, и сервер отвечает `304 Not Modified` с пустым телом, если ничего не изменилось — вы платите за несколько байтов заголовков вместо всей страницы:

```python
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 уменьшаются на 70-90% с помощью gzip или brotli — и вам выставляется счет за сжатый размер, который фактически передается по сети. Отправьте заголовок `Accept-Encoding` и позвольте серверу сжать данные. В `requests` Python это включено по умолчанию, если вы не отключаете его; в сыром клиенте запросите это явно:

```python
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-эндпоинта, который содержит те же данные в меньшем количестве байтов — цена и наличие продукта в ответе API на 10 КБ вместо отрисованной страницы на 3 МБ. Найдите XHR-запрос в вкладке Сеть вашего браузера и обращайтесь к нему напрямую. Магазины Shopify — классический пример: [эндпоинт products.json](https://quantumproxies.io/blog/shopify-products-json-scraping) предоставляет вам весь каталог без HTML. Когда вы можете читать API, делайте это — это разница между килобайтами и мегабайтами на запись.

## Позвольте API считать байты за вас

Если вы не хотите вручную настраивать правила блокировки для каждого сайта, [Scraper API](https://quantumproxies.io/scraper-api), который рендерит только при необходимости и возвращает разобранный markdown или JSON, выполняет удаление ресурсов за вас — вы получаете извлеченное содержание, а не мегабайты, из которых оно получено. И на [резидентных прокси с оплатой за гигабайт](https://quantumproxies.io/residential-proxies) экономия прямая: меньше байтов в сети — меньше долларов на счете, без потерь данных, которые вы сохраняете. Для полного понимания того, что на самом деле покупает гигабайт, смотрите наше объяснение [ценообразования за гигабайт](https://quantumproxies.io/blog/residential-proxy-pricing-per-gb-explained).

![Обработчик маршрутов Playwright, который прерывает каждый запрос изображений, медиа, шрифтов и стилей и пропускает все остальное. Карточка делит ресурсы: блокировать изображения, медиа, шрифты и CSS, за которые платишь, но не используешь; оставить HTML, JSON и вызовы XHR или fetch, которые несут данные, и проверить, что страница по-прежнему их отображает.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335199/blog/generated/qp-b9-068-diag2.png)
*Блокируйте ресурсы, за которые выставляется счет, но которые не используются; оставляйте HTML, JSON и XHR-эндпоинты, которые содержат ваши фактические данные.*

[Скрапьте более экономно на резидентных прокси с оплатой за гигабайт](https://quantumproxies.io/residential-proxies)

## Часто задаваемые вопросы

### Как рассчитывается трафик прокси?

По общему количеству байтов, переданных в обоих направлениях: заголовки запроса плюс тело запроса и заголовки ответа плюс тело ответа. Таким образом, каждое изображение, шрифт и скрипт, которые загружает страница, учитываются в вашем использовании, а не только HTML, который вы обрабатываете. Вот почему блокировка неиспользуемых ресурсов и пропуск неизмененных страниц напрямую переводится в более низкий счет на тарифах с оплатой за гигабайт.

### Ломает ли блокировка изображений скрапинг?

Нет, если вы осторожны. Блокировка изображений, медиа, шрифтов и стилей оставляет DOM и JavaScript нетронутыми, так что ваши селекторы и любой JSON для гидратации все еще работают — вы просто пропускаете визуальную нагрузку. Риск заключается в чрезмерной блокировке: никогда не отменяйте XHR/fetch-запросы, которые содержат ваши данные, и проверьте, что страница все еще выдает то, что вам нужно, прежде чем запускать в масштабе.

### Какое самое большое сокращение трафика?

Переход на JSON-эндпоинт вместо рендеринга полной страницы, если он существует. Ответ API на 10 КБ может заменить рендеринг на 3 МБ для той же записи — сокращение на 99%. После этого блокировка ресурсов в безголовом браузере и использование условных GET-запросов при повторных обходах являются самыми большими выигрышами. Сжатие почти бесплатно и всегда должно быть включено.

### Сколько я могу реально сэкономить?

Блокировка ресурсов обычно сокращает вес отрисованной страницы более чем наполовину; условные GET-запросы могут снизить трафик повторного обхода почти до нуля для страниц, которые не меняются; а переход с HTML на JSON-маршрут часто сокращает объем на запись более чем на 90%. В совокупности сокращение счета за резидентные гигабайты на 60-90% является реалистичной целью для большинства проектов.

Ничто из этого не изменяет то, что вы извлекаете — это изменяет то, сколько вы платите за извлечение. Блокируйте ресурсы, которые вы никогда не читаете, пропускайте страницы, которые не изменились, принимайте сжатие и предпочитайте JSON-маршруты полным рендерам. На прокси с оплатой за гигабайт эти четыре привычки регулярно снижают счет более чем наполовину. Для архитектуры, которая масштабирует это на миллионы страниц, смотрите наше руководство по [архитектуре крупномасштабного скрапинга](https://quantumproxies.io/blog/large-scale-web-scraping-architecture).

[Получите разобранное содержание без лишних байтов](https://quantumproxies.io/scraper-api)
