Рендеринг JavaScript
Выполнение скриптов страницы, чтобы построенное ими содержимое появилось. Без этого многие сайты отдают корректную, успешную и совершенно пустую страницу.
Всё большая доля страниц отдаёт оболочку и собирает содержимое в браузере. Заберите такую страницу обычным HTTP-клиентом, и вы получите код 200, несколько килобайт разметки и ничего из того, за чем пришли.
Это самая часто неверно диагностируемая ситуация при сборе данных. Ответ успешный, поэтому в логах ничто не говорит о блокировке, а парсер не находит ничего, и естественный вывод это что сайт отказал. Смена типа адреса в этот момент тратит деньги на проблему, которая никогда не была про адреса.
Проверка быстрая: заберите страницу и посмотрите на её размер и на то, встречаются ли нужные значения в сырых байтах. Если оболочка есть, а чисел нет, вам нужен рендеринг, а не другой выход.
У рендеринга есть цена, и при оплате по гигабайтам это самый крупный единичный множитель в этом деле. Безголовый браузер тянет скрипты, шрифты, картинки и трекеры, пока ему не сказали иначе, поэтому блокировка медиа на уровне запросов это часть первоначальной настройки, а не оптимизация на потом.
Почему страница приходит пустой
Страницы, собранные на сервере, содержат содержимое прямо в HTML. Собранные на клиенте содержат контейнер и скрипт, который наполняет его после второго круга запросов к внутреннему API.
Этот второй круг и есть самое интересное. Часто нужные данные приходят как JSON с той точки, которую страница вызывает сама, и обратиться к ней напрямую дешевле и стабильнее, чем рендерить страницу вообще.
Рендеринг обязателен, когда точка подписана, когда ответ собирается из нескольких вызовов или когда сайт проверяет, что код выполнило настоящее браузерное окружение.
Решить, нужен ли браузер
Три запроса дают ответ, и два исхода из трёх экономят много трафика:
Пустая страница или отказ
# 1. каков размер ответа и есть ли в нём нужное значение
curl -s -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/product | wc -c
curl -s -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/product | grep -c "price"
# 2. есть ли за страницей API: поищите вызов в разметке
curl -s -x login_c_US:password@proxy.sotaproxy.com:10000 https://target.example/product | grep -oE "/api/[a-z0-9/_-]+" | head
# 3. и только если оба шага впустую, рендерить, с блокировкой медиа на уровне запросов- Внутренний API, отдающий JSON, это лучший исход: без браузера, доля веса и стабильная структура для разбора.
- Если рендерить всё же надо, блокируйте картинки, шрифты, видео и аналитику. На резидентской тарификации это разница между десятками и сотнями гигабайтов.
- Рендеринг делает каждую страницу не только тяжелее, но и медленнее, поэтому меняется и планирование параллельности, а не только счёт.
Что означает пустой ответ с кодом 200
Обычно это не блокировка
Блокировка приходит кодом 403, страницей проверки или редиректом. Пустая оболочка с кодом 200 это страница, которую ещё не собрали.
Адрес получше её не наполнит
Резидентка вернёт ту же пустую оболочку, что и датацентр, потому что никто ни в чём не отказывал.
Рендеринг нужен не всегда
Большинство клиентских сайтов зовут API, который можно позвать самому, и это дешевле и по трафику, и по времени.
Рендеринг не бесплатен
Это самый крупный множитель на счёте по гигабайтам, и он невидим до закрытия первого месяца.
Связанные термины
Смотри на практике
Готов использовать рендеринг javascript?
SotaProxy даёт доступ к ротирующим резидентским, мобильным, дата-центр и ISP прокси. Без минимальных платежей.
Начать