# 如何抓取Google Shopping价格：优惠、卖家、地理数据

Google Shopping将数千家商家的价格汇总到一个地方。以下是如何将其购物垂直领域转化为您可以信赖的结构化、地理感知的价格信息。

Google Shopping是网络上最大的价格聚合器之一：对于给定产品，它从数千家商家中提取实时优惠、价格和卖家详情，汇总到一个单一的排名视图中。这使其成为价格情报的独特高效来源——一次查询即可显示数十家零售商当前的收费情况。本指南涵盖了如何干净地**抓取Google Shopping价格**，为什么地理位置会改变一切，以及何时停止手动操作浏览器而改用结构化API。

## 购物垂直领域实际提供了什么

购物标签是Google搜索的`tbm=shop`垂直领域。每个产品卡片包含标题、价格、商家/卖家名称、星级评分和评论数量，以及一个将同一商品的多个优惠分组的产品标识符。对于价格工作而言，卖家和价格的配对是黄金：您可以观察一个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
```

## 为什么位置决定答案

购物结果是本地化的。价格以当地货币显示，商家组合因市场而异，供应情况不同，仅`gl`参数是不够的——Google还会考虑请求IP的位置。从美国数据中心IP请求德国结果，您将得到不一致的、部分美国的答案。要读取柏林购物者实际看到的目录，请求必须从德国住宅IP退出。一个覆盖200多个国家的[住宅代理池](https://quantumproxies.io/residential-proxies)可以让您将出口固定到每个您定价的市场。这与[大规模竞争对手价格监控](https://quantumproxies.io/blog/competitor-price-monitoring-with-proxies)背后的原则相同。

![用 Playwright 自建的 Google Shopping 抓取器：通过代理启动浏览器，加载结果，关闭 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：购物的容器类名是混淆的并且会旋转，因此今天有效的选择器在两周后就会失效。添加重试逻辑（三次尝试加随机退避是合理的底线），您就有了一个工作抓取器——以及一个永久的维护工作。

```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形式交给您。您传递查询和国家；它返回已经提取的标题、价格、卖家、评分和产品ID的优惠。没有cookie墙，没有选择器维护，地理位置作为参数。对于必须持续运行的价格信息流，这种交易通常是正确的选择——我们关于[2026年SERP抓取如何工作的分析](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 价格数据流：为每个目标市场准备一组查询，用 engine=google_shopping 发起感知地理位置的 SERP 调用，解析出包含标题、价格、卖家和 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用于将同一商品的每个卖家聚集到一个条目下的产品ID。该产品ID是所有下游内容的连接键：按它分组优惠，您可以在商家之间进行同类比较，跟踪一个SKU的价格随时间变化，并检测新卖家进入列表或现有卖家消失的时刻。

两个字段在定价工作中值得特别关注。卖家名称让您可以建立每个商家的视图——谁持续削价，谁定价高，谁只在促销时出现——这比匿名的价格云更具行动性。评分提供了一个粗略的信任权重，因此您不会将一个评论的转售商与一个成熟的零售商等同对待。将这两个字段与价格和货币一起捕获，您的数据集可以回答一个简单价格信息流无法回答的问题。

- **product_id** - 集群键；去重并将每个卖家与其商品连接。
- **price + currency** - 指标，总是与您提取的市场配对。
- **seller / source** - 商家，用于每个零售商的竞争视图。
- **rating + reviews** - 信任权重，以便比较公平。
- **timestamp** - 标记每次捕获，以便可能进行历史和增量分析。

## 将优惠转化为情报

原始优惠不是情报——循环才是。按计划运行您的查询集，使用时间戳存储每次捕获，并与历史记录进行差异分析以揭示重要内容：竞争对手降价至低于您的价格，新卖家进入SKU，您可以利用的缺货。按产品ID分组优惠，以便同一商品的卖家进行同类比较，并按目标市场运行整个集合。如果您正在构建基于此的工具，我们关于[选择SERP API](https://quantumproxies.io/blog/serp-api-for-ai-seo-tools)的说明涵盖了JSON形状和每次查询成本问题，这些问题决定了大批量的单位经济效益。

[使用SERP API提取Google Shopping数据](https://quantumproxies.io/serp-api)

## 常见问题

### 如何使用Python抓取Google Shopping？

有两条路径。通过住宅代理驱动无头浏览器（Playwright），解除cookie同意墙，解析产品容器——灵活但维护成本高，因为标记是混淆的并且会变化。或者使用您的查询和国家代码调用SERP API的`google_shopping`引擎，并在一次请求中接收解析的优惠作为JSON。API路径需要的代码要少得多。

### Google Shopping数据是否因国家而异？

是的，差异很大。货币、商家集合、价格和供应情况都因市场而异。`gl`参数请求一个国家，但Google也会考虑请求IP，因此准确的本地化结果需要目标国家的出口IP。将请求固定到每个您定价的市场的住宅IP。

### 抓取Google Shopping是否合法？

收集公开显示的价格和优惠是价格情报的常见做法，但来源的条款和任何个人数据规则仍然适用，这不是法律建议。保持在公共产品数据范围内，尊重速率限制，如果您对特定用途不确定，请咨询法律顾问。不要收集或存储您不需要的个人信息。

### 我应该多久抓取一次购物价格？

这取决于您的类别变化速度。快速变化的电子产品或票务商品可能需要每小时捕获；稳定的类别每天即可。将节奏与价格波动匹配，给每次捕获加上时间戳，以便构建历史，并在IP和时间上分散请求，以保持礼貌和低风险。

Google Shopping将整个市场的定价浓缩到一个可查询的界面中。无论您是自己渲染它还是调用API以获取结构化JSON，获胜的模式都是相同的：地理定位每个市场，按计划捕获，并与历史记录进行差异分析。这是一个价格情报引擎，而不是一次性抓取。

[从SERP API获取结构化购物JSON](https://quantumproxies.io/serp-api)
