如何抓取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是动态渲染且防御良好的,因此简单的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])

单个优惠实际包含什么
在围绕一个产品卡片扩展管道之前,了解其形状是值得的。除了标题价格外,每个优惠还包含商家名称、商品状况(新、二手或翻新)、运输和税收提示、带评论数量的星级评分,以及Google用于将同一商品的每个卖家聚集到一个条目下的产品ID。该产品ID是所有下游内容的连接键:按它分组优惠,您可以在商家之间进行同类比较,跟踪一个SKU的价格随时间变化,并检测新卖家进入列表或现有卖家消失的时刻。
两个字段在定价工作中值得特别关注。卖家名称让您可以建立每个商家的视图——谁持续削价,谁定价高,谁只在促销时出现——这比匿名的价格云更具行动性。评分提供了一个粗略的信任权重,因此您不会将一个评论的转售商与一个成熟的零售商等同对待。将这两个字段与价格和货币一起捕获,您的数据集可以回答一个简单价格信息流无法回答的问题。
- product_id - 集群键;去重并将每个卖家与其商品连接。
- price + currency - 指标,总是与您提取的市场配对。
- seller / source - 商家,用于每个零售商的竞争视图。
- rating + reviews - 信任权重,以便比较公平。
- timestamp - 标记每次捕获,以便可能进行历史和增量分析。
将优惠转化为情报
原始优惠不是情报——循环才是。按计划运行您的查询集,使用时间戳存储每次捕获,并与历史记录进行差异分析以揭示重要内容:竞争对手降价至低于您的价格,新卖家进入SKU,您可以利用的缺货。按产品ID分组优惠,以便同一商品的卖家进行同类比较,并按目标市场运行整个集合。如果您正在构建基于此的工具,我们关于选择SERP API的说明涵盖了JSON形状和每次查询成本问题,这些问题决定了大批量的单位经济效益。
常见问题
如何使用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,获胜的模式都是相同的:地理定位每个市场,按计划捕获,并与历史记录进行差异分析。这是一个价格情报引擎,而不是一次性抓取。