Как собирать данные о ценах в Google Shopping: предложения, продавцы, геоданные

Google Shopping агрегирует цены от тысяч продавцов в одном месте. Вот как превратить его торговый вертикал в структурированную, геоориентированную ленту цен, которой можно доверять.

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

Что на самом деле дает торговый вертикал

Вкладка Shopping — это вертикал tbm=shop в поиске Google. Каждая карточка продукта содержит заголовок, цену, имя продавца/торговца, рейтинг в звездах и количество отзывов, а также идентификатор продукта, который группирует несколько предложений одного и того же товара. Для работы с ценами это сочетание продавца и цены — золото: вы можете отслеживать разброс цен у ритейлеров для одного SKU, выявлять, кто кого перебивает, и отслеживать динамику цен со временем — сырье для работы по перепрайсингу или мониторингу MAP.

Структура URL проста. Результаты разбиваются на страницы по десять на страницу через смещение start, а страна выхода устанавливается с помощью gl:

# Google Shopping search URL, page 1, US results
https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us

# Page 2 (results 11-20): add a start offset
https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us&start=10

Почему местоположение определяет ответ

Результаты Shopping локализованы. Цены отображаются в местной валюте, состав продавцов меняется в зависимости от рынка, доступность отличается, и одного параметра gl недостаточно — Google также учитывает местоположение IP-адреса запроса. Запросите немецкие результаты с IP-адреса центра обработки данных в США, и вы получите непоследовательный, частично американский ответ. Чтобы увидеть каталог, который фактически видит покупатель в Берлине, запрос должен выходить с немецкого резидентного IP. Пул резидентных прокси, охватывающий более 200 стран, позволяет закрепить выход для каждого рынка, который вы оцениваете. Это та же дисциплина, что и масштабный мониторинг цен конкурентов.

Сравнительная диаграмма DIY-скрапинга браузера и SERP API для сбора данных Google Shopping
Маршрут DIY работает, но вы наследуете cookie-стены, ломкие селекторы и бесконечные повторные попытки.

Маршрут DIY (и его налог)

Вы можете напрямую собирать страницы с помощью безголового браузера. Google Shopping динамически рендерится и хорошо защищен, поэтому простые HTTP-запросы не подходят — вам нужен настоящий движок браузера, прокси на каждый запрос и код для отклонения стены согласия на использование cookie (известная button#L2AGLb "Принять все") до загрузки продуктов. Затем вы боретесь с CSS: имена классов контейнеров Shopping обфусцированы и меняются, поэтому селекторы, которые работают сегодня, ломаются через две недели. Добавьте логику повторных попыток (три попытки с рандомизированной задержкой — разумный минимум), и у вас есть рабочий скрапер — и постоянная работа по его поддержке.

# Sketch of the DIY approach with Playwright + proxy
from playwright.sync_api import sync_playwright

PROXY = {"server": "http://gate.quantumproxies.io:8000",
         "username": "USER", "password": "PASS"}
URL = "https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us"

with sync_playwright() as pw:
    browser = pw.chromium.launch(proxy=PROXY, headless=True)
    page = browser.new_context(locale="en-US").new_page()
    page.goto(URL, wait_until="networkidle", timeout=15000)
    # dismiss the consent wall before products render
    for sel in ("button#L2AGLb", "button:has-text('Accept all')"):
        btn = page.locator(sel).first
        if btn.is_visible():
            btn.click(); break
    # ...then wrestle the obfuscated product containers
    browser.close()

Маршрут API: один вызов, структурированный JSON

Альтернатива — позволить SERP API управлять браузером, прокси и парсингом, и передать вам торговый вертикал в виде JSON. Вы передаете запрос и страну; он возвращает предложения с заголовком, ценой, продавцом, рейтингом и идентификатором продукта, уже извлеченными. Никаких cookie-стен, никакого обслуживания селекторов, гео как параметр. Для ленты цен, которая должна работать постоянно, этот обмен обычно является правильным — наш разбор как работает скрапинг SERP в 2026 году объясняет, почему путь сырого HTML становится все сложнее.

# One request to the SERP API's Google Shopping vertical
curl -G "https://api.quantumproxies.io/v1/serp" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --data-urlencode "engine=google_shopping" \
  --data-urlencode "q=wireless earbuds" \
  --data-urlencode "gl=us"
import requests

def shopping_offers(query, country="us"):
    r = requests.get(
        "https://api.quantumproxies.io/v1/serp",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        params={"engine": "google_shopping", "q": query, "gl": country},
        timeout=30,
    )
    r.raise_for_status()
    rows = []
    for p in r.json().get("shopping_results", []):
        rows.append({
            "title":  p.get("title"),
            "price":  p.get("price"),
            "seller": p.get("source"),   # merchant name
            "rating": p.get("rating"),
            "pid":    p.get("product_id"),
        })
    return rows

for country in ("us", "gb", "de"):
    print(country, shopping_offers("wireless earbuds", country)[:3])
Диаграмма конвейера от набора запросов через геоориентированный SERP API к разобранным предложениям и хранилищу истории цен
Лента цен — это цикл: запрос, геоориентированный вызов SERP, разбор предложений, хранение и оповещение о движении.

Что на самом деле содержит одно предложение

Стоит понять форму одной карточки продукта, прежде чем масштабировать вокруг нее конвейер. Помимо основной цены, каждое предложение содержит имя продавца, состояние товара (новый, б/у или восстановленный), подсказки по доставке и налогам, звездный рейтинг с количеством отзывов и идентификатор продукта, который Google использует для кластеризации всех продавцов одного и того же товара под одной записью. Этот идентификатор продукта является ключом для всего последующего: группируйте предложения по нему, и вы сможете сравнивать аналогичные товары у разных продавцов, отслеживать цену одного SKU со временем и обнаруживать момент, когда новый продавец входит в список или существующий исчезает.

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

Преобразование предложений в интеллект

Сырые предложения — это не интеллект — цикл является таковым. Запускайте набор запросов по расписанию, храните каждую фиксацию с временной меткой и сравнивайте с историей, чтобы выявить важное: конкурент опустился ниже вашей цены, новый продавец вошел в SKU, исчерпание запасов, которое вы можете использовать. Группируйте предложения по идентификатору продукта, чтобы продавцы одного и того же товара сравнивались аналогично, и запускайте весь набор по целевому рынку. Если вы строите инструменты на основе этого, наша заметка о выборе SERP API охватывает вопросы формы JSON и стоимости за запрос, которые определяют экономику единицы при больших объемах.

Получите данные Google Shopping с помощью SERP API

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

Как собирать данные из Google Shopping с помощью Python?

Два пути. Управляйте безголовым браузером (Playwright) через резидентный прокси, отклоняйте стену согласия на использование cookie и разбирайте контейнеры продуктов — гибко, но требует высокой поддержки, потому что разметка обфусцирована и меняется. Или вызовите движок google_shopping SERP API с вашим запросом и кодом страны и получите разобранные предложения в формате JSON в одном запросе. Путь API требует гораздо меньше кода для поддержания в рабочем состоянии.

Меняются ли данные Google Shopping в зависимости от страны?

Да, значительно. Валюта, набор продавцов, цены и доступность варьируются в зависимости от рынка. Параметр gl запрашивает страну, но Google также учитывает IP-адрес запроса, поэтому для точных локализованных результатов нужен выходной IP в целевой стране. Закрепите запрос за резидентным IP для каждого рынка, который вы оцениваете.

Законно ли собирать данные из Google Shopping?

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

Как часто следует собирать цены из Shopping?

Это зависит от того, насколько быстро движется ваша категория. Быстро движущиеся электроника или товары с билетами могут требовать почасовых фиксаций; стабильные категории подходят для ежедневных. Соответствуйте частоту волатильности цен, отмечайте каждую фиксацию временной меткой, чтобы вы могли строить историю, и распределяйте запросы по IP и времени, чтобы оставаться вежливым, низкорисковым посетителем.

Google Shopping конденсирует ценообразование всего рынка в одну запрашиваемую поверхность. Независимо от того, рендерите ли вы его сами или вызываете API для структурированного JSON, выигрышная схема остается той же: геоориентируйте каждый рынок, фиксируйте по расписанию и сравнивайте с историей. Это движок ценовой информации, а не одноразовый скрапинг.

Получите структурированный Shopping JSON из SERP API