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

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

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

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

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

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

```bash
# 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. Пул [резидентных прокси](https://quantumproxies.io/residential-proxies), охватывающий более 200 стран, позволяет закрепить выход для каждого рынка, который вы оцениваете. Это та же дисциплина, что и [масштабный мониторинг цен конкурентов](https://quantumproxies.io/blog/competitor-price-monitoring-with-proxies).

![Самодельный скрапер Google Shopping на Playwright: запустить браузер через прокси, загрузить результаты, закрыть окно согласия button#L2AGLb, затем бороться с обфусцированными контейнерами; карточка сравнивает этот налог (cookie-стена и селекторы, которые ломаются за две недели) с одним вызовом SERP API, возвращающим разобранные предложения.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335165/blog/generated/qp-b9-028-diag1.png)
*Маршрут DIY работает, но вы наследуете cookie-стены, ломкие селекторы и бесконечные повторные попытки.*

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

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

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

PROXY = {"server": "http://residentialpremium.quantumproxies.io:8080",
         "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](https://quantumproxies.io/serp-api) управлять браузером, прокси и парсингом, и передать вам торговый вертикал в виде JSON. Вы передаете запрос и страну; он возвращает предложения с заголовком, ценой, продавцом, рейтингом и идентификатором продукта, уже извлеченными. Никаких cookie-стен, никакого обслуживания селекторов, гео как параметр. Для ленты цен, которая должна работать постоянно, этот обмен обычно является правильным — наш разбор [как работает скрапинг SERP в 2026 году](https://quantumproxies.io/blog/how-serp-scraping-works-in-2026) объясняет, почему путь сырого HTML становится все сложнее.

```bash
# One request to the SERP API's Google Shopping vertical
curl -X POST "https://api.quantumproxies.io/v1/scraper/serp" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "wireless earbuds", "search_type": "shopping", "country": "us"}'
```

```python
import requests

def shopping_offers(query, country="us"):
    r = requests.post(
        "https://api.quantumproxies.io/v1/scraper/serp",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        json={"query": query, "search_type": "shopping", "country": country},
        timeout=120,
    )
    r.raise_for_status()
    rows = []
    for p in r.json()["payload"].get("shopping", []):
        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 Shopping как цикл из пяти шагов: набор запросов для каждого целевого рынка, геоориентированный вызов SERP с engine=google_shopping, разобранные предложения с title, price, seller и product_id, хранение с отметкой времени и сравнением с историей и оповещение при изменении; карточка перечисляет важные оповещения.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335165/blog/generated/qp-b9-028-diag2.png)
*Лента цен — это цикл: запрос, геоориентированный вызов SERP, разбор предложений, хранение и оповещение о движении.*

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

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

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

- **product_id** — ключ кластера; дублируйте и объединяйте каждого продавца товара по нему.
- **price + currency** — метрика, всегда в паре с рынком, с которого вы ее получили.
- **seller / source** — торговец, для конкурентных видов на уровне ритейлера.
- **rating + reviews** — вес доверия, чтобы сравнения были справедливыми.
- **timestamp** — отметьте каждую фиксацию, чтобы история и дельты были возможны.

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

Сырые предложения — это не интеллект — цикл является таковым. Запускайте набор запросов по расписанию, храните каждую фиксацию с временной меткой и сравнивайте с историей, чтобы выявить важное: конкурент опустился ниже вашей цены, новый продавец вошел в SKU, исчерпание запасов, которое вы можете использовать. Группируйте предложения по идентификатору продукта, чтобы продавцы одного и того же товара сравнивались аналогично, и запускайте весь набор по целевому рынку. Если вы строите инструменты на основе этого, наша заметка о [выборе SERP API](https://quantumproxies.io/blog/serp-api-for-ai-seo-tools) охватывает вопросы формы JSON и стоимости за запрос, которые определяют экономику единицы при больших объемах.

[Получите данные Google Shopping с помощью SERP API](https://quantumproxies.io/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](https://quantumproxies.io/serp-api)
