Как собирать данные о ценах в 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 (и его налог)
Вы можете напрямую собирать страницы с помощью безголового браузера. 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])

Что на самом деле содержит одно предложение
Стоит понять форму одной карточки продукта, прежде чем масштабировать вокруг нее конвейер. Помимо основной цены, каждое предложение содержит имя продавца, состояние товара (новый, б/у или восстановленный), подсказки по доставке и налогам, звездный рейтинг с количеством отзывов и идентификатор продукта, который Google использует для кластеризации всех продавцов одного и того же товара под одной записью. Этот идентификатор продукта является ключом для всего последующего: группируйте предложения по нему, и вы сможете сравнивать аналогичные товары у разных продавцов, отслеживать цену одного SKU со временем и обнаруживать момент, когда новый продавец входит в список или существующий исчезает.
Два поля заслуживают особого внимания для работы с ценами. Имя продавца позволяет создать вид на уровне каждого торговца — кто постоянно перебивает, кто держит высокие цены, кто появляется только на акциях — что гораздо более действенно, чем анонимное облако цен. Рейтинг дает приблизительный вес доверия, чтобы вы не приравнивали продавца с одним отзывом к устоявшемуся ритейлеру. Захватите оба вместе с ценой и валютой, и ваш набор данных ответит на вопросы, на которые голая лента цен никогда не сможет ответить.
- product_id — ключ кластера; дублируйте и объединяйте каждого продавца товара по нему.
- price + currency — метрика, всегда в паре с рынком, с которого вы ее получили.
- seller / source — торговец, для конкурентных видов на уровне ритейлера.
- rating + reviews — вес доверия, чтобы сравнения были справедливыми.
- timestamp — отметьте каждую фиксацию, чтобы история и дельты были возможны.
Преобразование предложений в интеллект
Сырые предложения — это не интеллект — цикл является таковым. Запускайте набор запросов по расписанию, храните каждую фиксацию с временной меткой и сравнивайте с историей, чтобы выявить важное: конкурент опустился ниже вашей цены, новый продавец вошел в 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, выигрышная схема остается той же: геоориентируйте каждый рынок, фиксируйте по расписанию и сравнивайте с историей. Это движок ценовой информации, а не одноразовый скрапинг.