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

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

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

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

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

为什么位置决定答案

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

DIY浏览器抓取与用于收集Google Shopping数据的SERP API的对比图
DIY路线可行,但您会遇到cookie墙、破损的选择器和永无止境的重试。

DIY路线(及其代价)

您可以使用无头浏览器直接抓取页面。Google Shopping是动态渲染且防御良好的,因此简单的HTTP请求不够——您需要一个真实的浏览器引擎、每个请求的代理,以及在任何产品加载之前解除cookie同意墙(臭名昭著的button#L2AGLb“全部接受”)的代码。然后您需要应对CSS:购物的容器类名是混淆的并且会旋转,因此今天有效的选择器在两周后就会失效。添加重试逻辑(三次尝试加随机退避是合理的底线),您就有了一个工作抓取器——以及一个永久的维护工作。

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

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

将优惠转化为情报

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

使用SERP API提取Google Shopping数据

常见问题

如何使用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