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

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

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

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

Самый дешевый байт — это тот, который вы не загружаете. Два метода сокращают потери на повторных запросах в мониторинговых задачах. Запрос HEAD загружает только заголовки, чтобы проверить Content-Length или Last-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 уменьшаются на 70-90% с помощью gzip или brotli — и вам выставляется счет за сжатый размер, который фактически передается по сети. Отправьте заголовок Accept-Encoding и позвольте серверу сжать данные. В requests 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 предоставляет вам весь каталог без HTML. Когда вы можете читать API, делайте это — это разница между килобайтами и мегабайтами на запись.

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

Если вы не хотите вручную настраивать правила блокировки для каждого сайта, Scraper API, который рендерит только при необходимости и возвращает разобранный markdown или JSON, выполняет удаление ресурсов за вас — вы получаете извлеченное содержание, а не мегабайты, из которых оно получено. И на резидентных прокси с оплатой за гигабайт экономия прямая: меньше байтов в сети — меньше долларов на счете, без потерь данных, которые вы сохраняете. Для полного понимания того, что на самом деле покупает гигабайт, смотрите наше объяснение ценообразования за гигабайт.

Список ресурсов для блокировки при скрапинге (изображения, CSS, шрифты, медиа, реклама) против ресурсов, которые нужно оставить (HTML, JSON, XHR данные)
Блокируйте ресурсы, за которые выставляется счет, но которые не используются; оставляйте HTML, JSON и XHR-эндпоинты, которые содержат ваши фактические данные.

Скрапьте более экономно на резидентных прокси с оплатой за гигабайт

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

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

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

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

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

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

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

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

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

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

Получите разобранное содержание без лишних байтов