如何抓取StockX和GOAT的转售数据进行市场研究
官方的StockX API是为卖家构建的,每天限制在25,000次调用。进行市场研究时,你需要访问公共页面——以下是如何干净地提取价格历史、尺码分布和热度信号的方法。
球鞋转售是一个真实的市场,具有真实的价格发现,而StockX和GOAT是其两个最大的订单簿。如果你想研究这个市场——追踪价格历史、测量尺码分布、发现哪些发布正在升温——本能是使用官方的StockX API。这通常是错误的工具。StockX开发者API是为卖家构建的:它在一个审批门后使用OAuth 2.0进行身份验证,旨在发布和管理列表和订单,并限制在每24小时25,000次请求,每秒一次请求,超过时会立即返回429错误。它给卖家他们自己的库存,而不是研究人员整个市场。对于市场研究,数据存在于公共产品页面上。本指南展示了如何干净地收集这些数据。
为什么官方StockX API不适合研究
开发者门户明确其用途:目录搜索、列表管理和订单管理。即使是平台上的卖家也报告说,在首次获得API访问批准时需要长时间等待和遭到拒绝。而速率上限——每天25,000次调用,批量操作限制在每5分钟500项,每天最多50,000项——对于经营自己的商店来说是慷慨的,但对于调查数千种风格的多个尺码和两个市场来说是微不足道的。关键是,它不会给你一个历史市场数据流:研究人员想要的数字——年度高低、波动性、零售溢价、每个尺码的销售速度——是在公共页面上计算和显示的,而不是作为批量研究端点公开的。
所以实际的划分很简单。如果你是一个自动化自己需求的卖家,请使用官方API。如果你在进行价格情报或趋势研究,请负责任地使用公共页面。同样的逻辑适用于转售和零售——我们在大规模价格监控中走过一般版本。
API还存在一个覆盖问题无法解决。转售价格是地域敏感的:同一双鞋在美国市场与欧洲或日本市场的溢价不同,因为供应、税收和需求因地区而异。研究全球市场的研究人员需要从多个国家读取每个产品,而卖家API并非为此设计,但一个具有国家定位的轮换住宅池可以默认处理。这种地理维度通常是有趣套利隐藏的地方。
StockX或GOAT产品页面包含哪些数据
每个产品页面在解析嵌入的JSON后都包含惊人丰富的负载。每种风格你可以读取一个稳定的SKU和UPC,每个尺码则是整个订单簿的一部分:
- 每个尺码的最低要价和最高出价——实时的买卖价差告诉你真实的流动性。
- 每个尺码的总要价——供应深度;一个有200多个要价的尺码并不稀缺,只有3个的则是。
- 15、30和60天窗口内的销售计数——速度,这是最接近需求信号的东西。
- 年度统计——高、低、平均价格,销售计数和每种风格的波动性数字。
- 零售溢价——一个热门发布可以高于其零售价格约25%或更多;一个失败的则低于它。
- 每周订单计数——一个粗略但诚实的目录受欢迎度排名。

在不被封锁的情况下获取页面
StockX和GOAT在严密的机器人管理后面,而一个数据中心IP反复访问产品JSON会在几次请求内被挑战。保持收集活力的两件事是:看起来像普通购物者的住宅出口IP,以及每次请求的轮换,以便没有单个地址建立可疑模式。通过住宅代理——覆盖200多个国家的9000万+ IP——每个请求都来自不同的家庭地址:
import requests, json
proxies = {
"http": "http://USER:PASS@gate.quantumproxies.io:PORT",
"https": "http://USER:PASS@gate.quantumproxies.io:PORT",
}
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"}
url = "https://stockx.com/air-jordan-1-retro-high-og-example"
html = requests.get(url, proxies=proxies, headers=headers, timeout=(5, 30)).text
# Product data hydrates from an embedded JSON blob, not the visible HTML.
start = html.find('{"props":')
blob = json.loads(html[start:html.rindex("}", 0, html.find("</script>", start)) + 1])
# Walk blob -> product -> market to reach asks, bids and statistics.
当页面返回一个几乎空的外壳而不是JSON时,它被提供了一个客户端渲染或挑战版本——这是我们在空白页面,缺失数据中分解的症状。这是从原始代理升级到托管抓取的时机。Scraper API按需渲染JavaScript并返回干净的JSON或markdown,因此你无需自己维护无头浏览器和解析器:
curl -G "https://api.quantumproxies.io/scrape" \
--data-urlencode "url=https://stockx.com/air-jordan-1-retro-high-og-example" \
--data-urlencode "render=true" \
--data-urlencode "country=us" \
-H "Authorization: Bearer YOUR_API_KEY"
将原始请求转化为研究信号
一旦解析了变体,分析就是将一堆数字转化为决策的小算术。尺码分布——最便宜和最贵尺码之间的差距——揭示了哪些尺码稀缺,而零售溢价则将真正的热度与营销噪音区分开来:
def size_spread(variants):
asks = [v["lowest_ask"] for v in variants if v.get("lowest_ask")]
return {
"cheapest_size": min(asks),
"priciest_size": max(asks),
"spread_pct": round((max(asks) - min(asks)) / min(asks) * 100, 1),
}
def hype_score(stats, retail):
premium = (stats["annual_average_price"] - retail) / retail
return round(premium * 100, 1) # % over retail; negative = a dud
在每日计划中运行一个监控列表,你就有了一个转售指数:上升的速度加上扩大的溢价是一个早期的热度信号,而下降的销售和缩小的溢价则标志着衰退。将StockX与GOAT的相同SKU进行交叉引用,揭示套利并确认哪个平台在特定类别中引领价格发现。如果你的监控列表涉及数千种风格,请通过削减代理带宽成本中的策略控制你的账单——你很少需要图像,只需要JSON。
关于行为的一点说明:这是对公共、非个人定价数据的市场研究,这是抓取的低风险端,但你仍然应该尊重每个平台的服务条款,并礼貌地限制自己的速率。这是指导,而不是法律建议。

常见问题
StockX有官方API吗?
有,但它是一个卖家工具,而不是市场数据服务。StockX开发者API在一个审批过程后使用OAuth 2.0进行身份验证,涵盖目录搜索、列表管理和订单管理。它限制在每24小时25,000次请求,每秒一次请求,并返回你自己的销售活动,而不是更广泛市场的批量历史数据。
GOAT有球鞋价格的API吗?
GOAT不提供面向研究人员的公共定价API。第三方聚合器和开源项目通过抓取其公共页面来获取GOAT数据,这与你对StockX采取的方法相同。因为两个平台都使用强大的机器人管理,可靠的收集依赖于住宅IP和每次请求的轮换,而不是数据中心端点。
没有官方API我能获得哪些球鞋数据?
公共产品页面公开每个尺码的最低要价和最高出价、总要价、15、30和60天窗口内的销售计数、年度高/低/平均价格、波动性数字、每周订单速度和稳定的SKU/UPC标识符。这足以构建价格历史、尺码分布分析和热度指数,而无需接触卖家API。
如何避免在抓取StockX时被封锁?
使用住宅代理,使请求看起来像普通购物者,每次请求轮换出口IP,设置一个合理的User-Agent,并控制节奏。当页面返回一个空壳而不是嵌入的JSON时,切换到一个渲染抓取API,该API执行页面的JavaScript并返回结构化数据,而不是自己对抗挑战。
转售市场奖励那些能最好地测量它的人。官方API不会给你这种测量——它从未打算这样做。公共页面,收集在干净的住宅IP上,并简化为速度和溢价,将混乱的订单簿转化为你可以基于研究决策进行交易的信号。