Как скрейпить цены Google Shopping в 2026: практическое руководство с прокси

Конкурентный парсинг Google Shopping требует разбора HTML SERP, обхода reCAPTCHA и локализации через residential-прокси. Разбираем селекторы, Python-код и стратегию ротации IP.

How to Scrape Google Shopping Prices in 2026: A Practical Guide

Как скрейпить цены Google Shopping в 2026: API против HTML

Если вам нужно собрать конкурентные цены из Google Shopping, первый вопрос — какой источник данных использовать. У Google есть Content API for Shopping, но он отдаёт только товары собственного мерчанта-аккаунта. Чужие цены, продавцов и рейтинги через официальный API не получить — это означает, что конкурентная разведка сводится к парсингу SERP-страницы tbm=shop или карточек товаров /shopping/product/.

В этом руководстве мы покажем, как скрейпить цены Google Shopping в 2026 году: паттерны URL, CSS-селекторы для парсинга, стратегию ротации IP через residential-прокси с геолокацией на уровне города, а также методы обхода антибот-защиты Google. Целевая аудитория — аналитики ценообразования и инженеры конкурентной разведки, которым нужны надёжные пайплайны данных.

Почему проблема существует: антибот-стек Google

Google Shopping работает поверх основного поискового движка Google, который имеет один из самых агрессивных антибот-стеков в индустрии. При парсинге вы столкнётесь с тремя уровнями защиты:

  • reCAPTCHA и Enterprise-варианты — при подозрительном трафике Google показывает интерактивную капчу или невидимую reCAPTCHA v3, которая присваивает риск-скор и может заблокировать запрос без видимой причины.
  • Редирект sorry/index — вместо капчи Google может молча перенаправить на https://www.google.com/sorry/index?continue=.... Это «мягкий блок»: страница не отдаёт результаты, но и не показывает CAPTCHA. Часто срабатывает после 50–200 запросов с одного IP за короткий период.
  • Per-IP rate limits — Google ограничивает частоту запросов с одного IP-адреса. Порог зависит от типа IP: datacenter-адреса блокируются быстрее (часто после 20–50 запросов), residential-адреса выдерживают дольше, но тоже имеют лимиты.

Согласно RFC 7231, сервер может возвращать статус 429 (Too Many Requests) при превышении лимитов, но Google часто использует 200 OK с редиректом на sorry-страницу или 302 на CAPTCHA — это усложняет детектирование блоков.

URL-паттерны и селекторы для Google Shopping

Поисковая SERP Google Shopping

Базовый URL для поиска по товарам:

https://www.google.com/search?tbm=shop&q=Nike+Air+Max+90&gl=US&hl=en

Ключевые параметры:

  • tbm=shop — переключает на вкладку Shopping.
  • q= — поисковый запрос (URL-encoded).
  • gl= — геолокация страны (US, DE, FR, GB и т.д.).
  • hl= — язык интерфейса (en, de, fr, ru).
  • num= — количество результатов на странице (Google обычно отдаёт 20–40 для Shopping).

CSS-селекторы для парсинга SERP

Структура HTML Google Shopping регулярно меняется, но на момент 2026 года актуальны следующие селекторы:

ДанныеCSS-селекторОписание
Контейнер результатов.sh-dgr__contentОсновной блок с результатами Shopping
Карточка товара.sh-pr__product-resultsОтдельная карточка товара в выдаче
Цена.a8Pemb или span[data-base-shipping-id]Текст цены, например «$129.99»
Название товараh3.t16o7d или .Lq0KhdЗаголовок товара
Продавец.dMEzLd или span[data-shipping]Имя продавца/магазина
Рейтингspan[aria-label$="stars"]Звёздный рейтинг, например «4.5 stars»

Карточка товара /shopping/product/

При клике на товар открывается страница детализации:

https://www.google.com/shopping/product/1:en-US:1234567890:0?gl=US&hl=en

Здесь доступны офферы от разных продавцов. Селекторы для панели офферов:

  • .sh-os__offer-seller — имя продавца в списке офферов.
  • .sh-os__offer-price — цена конкретного оффера.
  • .sh-os__offer-link — ссылка на магазин продавца.
  • .sh-pro__geo-region — регион доставки для оффера.

Важно: Google регулярно обновляет DOM-структуру. Рекомендуется использовать несколько fallback-селекторов и логировать неразобранные блоки для последующего анализа.

Локализованные цены: почему нужны residential-прокси с городом

Цены в Google Shopping зависят от геолокации пользователя. Американский покупатель видит продавцов из США с ценами в USD, немецкий — продавцов из ЕС с ценами в EUR. Это означает, что для корректного сбора конкурентных цен по рынкам вам нужны residential-прокси с геотаргетингом на уровне страны и города.

Параметры gl и hl в URL задают страну и язык, но Google также сверяет IP-адрес запроса с указанной геолокацией. Если IP из Германии, а gl=US, Google может показать гибридные результаты или вернуть редирект. Residential-прокси с точным соответствием IP и параметра gl дают наиболее чистые данные.

ProxyHat поддерживает геотаргетинг на уровне страны и города через флаги в username:

  • user-country-US — IP из США (случайный город).
  • user-country-DE-city-berlin — IP из Берлина, Германия.
  • user-country-GB-city-london — IP из Лондона, Великобритания.

Для сравнения, datacenter-прокси часто блокируются Google Shopping уже после 20–50 запросов, тогда как residential-адреса выдерживают 200–500 запросов с одного IP до мягкого блока, согласно отраслевым наблюдениям.

Практическая реализация: Python requests через ProxyHat

Ниже — рабочий пример парсинга Google Shopping через ProxyHat residential-прокси. Скрипт отправляет запрос на SERP, парсит первый блок результата и выводит название, цену, продавца и рейтинг.

import requests
from bs4 import BeautifulSoup
import time
import random

# ProxyHat residential proxy with US geo-targeting
proxy_url = "http://user-country-US:YOUR_PASSWORD@gate.proxyhat.com:8080"

proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

query = "Nike Air Max 90"
url = f"https://www.google.com/search?tbm=shop&q={requests.utils.quote(query)}&gl=US&hl=en"

response = requests.get(url, headers=headers, proxies=proxies, timeout=30)

# Detect soft-block: check for sorry redirect
if "sorry/index" in response.url:
    print("SOFT BLOCK detected — IP flagged. Rotate session.")
    exit(1)

soup = BeautifulSoup(response.text, "html.parser")

# Parse first product result block
product_container = soup.select_one(".sh-dgr__content .sh-pr__product-results")

if product_container:
    title = product_container.select_one("h3.t16o7d")
    price = product_container.select_one(".a8Pemb")
    seller = product_container.select_one(".dMEzLd")
    rating = product_container.select_one('span[aria-label$="stars"]')

    print(f"Title:  {title.text.strip() if title else 'N/A'}")
    print(f"Price:  {price.text.strip() if price else 'N/A'}")
    print(f"Seller: {seller.text.strip() if seller else 'N/A'}")
    print(f"Rating: {rating['aria-label'] if rating else 'N/A'}")
else:
    print("No product results found — selectors may have changed.")
    print(f"Response length: {len(response.text)} chars")
    # Save HTML for debugging
    with open("debug_shopping.html", "w", encoding="utf-8") as f:
        f.write(response.text)

Пример вывода (сокращённо):

Title:  Nike Air Max 90 Men's Shoes
Price:  $129.97
Seller: Foot Locker
Rating: 4.6 stars

Версия для SOCKS5

Если вам нужен SOCKS5 (например, для обхода корпоративных прокси-фильтров), используйте порт 1080:

proxy_url = "socks5://user-country-DE-city-berlin:YOUR_PASSWORD@gate.proxyhat.com:1080"

proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

Пагинация, батчинг и детектирование блоков

Пагинация Google Shopping

Google Shopping не использует классическую пагинацию с номерами страниц. Вместо этого применяется бесконечная прокрутка через AJAX-запросы. Для программного доступа можно использовать параметр start:

https://www.google.com/search?tbm=shop&q=Nike+Air+Max+90&gl=US&hl=en&start=20

Шаг start обычно равен 20 или 40. Для глубокого сбора данных рекомендуется не уходить дальше 3–5 страниц (60–200 результатов), так как релевантность падает, а риск блокировки растёт.

Стратегия батчинга запросов

  • Размер батча: 10–20 запросов на одну сессию IP перед ротацией.
  • Задержка: случайные 2–5 секунд между запросами (не фиксированные).
  • Ротация сессий: используйте флаг user-session-{id} для sticky-сессий, меняйте ID каждые 10–20 запросов.
  • Конкурентность: не более 3–5 параллельных потоков с одного IP.

Детектирование мягких блоков

Ключевой навык — обнаружить мягкий блок до того, как получите hard CAPTCHA. Признаки мягкого блока:

  1. Редирект на /sorry/index — проверяйте response.url.
  2. Пустая SERP при наличии результатов (длина HTML < 10 000 символов).
  3. Статус 429 или 503.
  4. CAPTCHA-страница вместо результатов (ищите g-recaptcha в HTML).
  5. Резкое падение количества распарсенных результатов (с 20 до 0–2).
def check_soft_block(response, min_html_length=10000):
    """Detect soft blocks before they escalate to hard CAPTCHA."""
    if "sorry/index" in response.url:
        return "sorry_redirect"
    if response.status_code == 429:
        return "rate_limited"
    if "g-recaptcha" in response.text:
        return "captcha_page"
    if len(response.text) < min_html_length:
        return "empty_response"
    return None

# Usage in loop
block_type = check_soft_block(response)
if block_type:
    print(f"Soft block detected: {block_type}")
    # Rotate session immediately
    session_id = f"shop-{random.randint(10000, 99999)}"
    proxy_url = f"http://user-country-US-session-{session_id}:PASS@gate.proxyhat.com:8080"
    time.sleep(random.uniform(10, 30))  # Cool-down before retry

Сравнение типов прокси для Google Shopping

Тип проксиСкоростьРиск блокировкиГеотаргетингСтоимостьРекомендация
DatacenterВысокая (<100ms)Очень высокий (20–50 запросов)ОграниченныйНизкаяНе рекомендуется для Shopping
ResidentialСредняя (200–800ms)Низкий (200–500 запросов)Страна + городСредняяОптимальный выбор
MobileНизкая (500–2000ms)МинимальныйСтрана (ASN)ВысокаяДля самых жёстких блоков

Для большинства задач парсинга Google Shopping residential-прокси с геотаргетингом на уровне города — оптимальный баланс цены и надёжности. Ознакомьтесь с тарифами на странице цен ProxyHat.

Этика, ToS и правовые аспекты

Парсинг публичных данных — серая зона. Ключевые моменты:

  • Публичные данные только: цены и рейтинги на Google Shopping общедоступны без авторизации. Не пытайтесь обходить paywall или собирать персональные данные.
  • robots.txt: Google запрещает парсинг SERP в robots.txt для большинства User-Agent. Технически вы можете игнорировать robots.txt, но это ослабляет вашу правовую позицию.
  • CFAA (Computer Fraud and Abuse Act): в США парсинг публичных данных после дела hiQ Labs v. LinkedIn (2022) признан допустимым, но обход технических барьеров может квалифицироваться иначе.
  • GDPR: если вы собираете данные из ЕС, убедитесь, что не обрабатываете персональные данные пользователей. Цены товаров не являются персональными данными, но отзывы с именами — да.
  • ToS Google: условия использования Google запрещают автоматизированный доступ. Нарушение ToS — не обязательно преступление, но может привести к бану аккаунтов и IP.

Для крупномасштабного коммерческого сбора данных рассмотрите официальные партнёрские программы Google, такие как Custom Search API (ограниченный, но легитимный доступ) или официальный SERP API-партнёр. Полная документация по настройке прокси доступна на docs.proxyhat.com.

Key Takeaways

Главное о парсинге Google Shopping в 2026:

  • Content API for Shopping отдаёт только собственные товары — для конкурентных цен нужен парсинг HTML SERP.
  • Базовый URL: google.com/search?tbm=shop&q=QUERY&gl=COUNTRY&hl=LANG.
  • Ключевые селекторы: .sh-dgr__content, .sh-pr__product-results, .a8Pemb (цена).
  • Локализация требует residential-прокси с city-level geo: user-country-DE-city-berlin.
  • Детектируйте мягкие блоки (sorry-редирект, пустой HTML) до получения hard CAPTCHA.
  • Батч по 10–20 запросов, задержки 2–5 секунд, ротация сессий.
  • Этика: только публичные данные, уважайте robots.txt, рассматривайте официальные API для масштаба.

Готовы начать? Изучите доступные локации прокси на странице локаций ProxyHat, прочитайте о веб-скрапинге и SERP-трекинге в наших руководствах, или сразу перейдите к тарифам.

Готовы начать?

Доступ к более чем 50 млн резидентных IP в 148+ странах с AI-фильтрацией.

Смотреть ценыРезидентные прокси
← Вернуться в Блог