抓取 Best Buy 和 Target:店铺级库存和价格数据
大卖场的价格和库存数据隐藏在店铺选择器和邮政编码后面,而不仅仅是产品 URL。正确设置店铺范围和地理定位,Best Buy 和 Target 就会变成干净的 JSON 数据流。
Best Buy 和 Target 看起来像普通的产品页面,直到你尝试大规模抓取价格和库存时才会发现,答案取决于你尚未选择的店铺。价格是全国性的,直到邮政编码使其本地化;可用性毫无意义,直到店铺范围确定。正确设置店铺选择和地理定位,这些大卖场网站就会变成干净的 JSON 数据流。设置错误,你只会收集全国占位符价格和“检查附近店铺”而没有任何数据。此指南涵盖店铺级库存、地理定价、隐藏的端点以及保持整个过程正常运行的代理设置。
第一道墙:地区和店铺
Best Buy 仅服务三个市场——美国、加拿大和墨西哥——并且会向区域外的 IP 展示国家选择页面而不是产品。这单独就阻止了任何从错误出口抓取的人。因此,第一步是在目标市场内使用住宅 IP。第二步是确定店铺范围:两个零售商都将店内可用性和价格与特定店铺或邮政编码关联。在你设置之前,你看到的是全国默认值,而不是补货员或价格分析师实际需要的本地数据。
实用模式:打开一个粘性会话,在整个过程中固定一个住宅出口,设置一次店铺或邮政编码,然后在同一 IP 上读取你关心的每个 SKU。当你移动到下一个店铺时再轮换 IP,而不是在读取之间。这模拟了真实购物者的行为——一个位置,多个产品——并且保持网站返回该店铺的库存和价格,而不是重置为全国视图。
读取 JSON,而不是 DOM
两个网站都在客户端渲染价格、评分和可用性,这意味着你从普通请求中获得的 HTML 通常是一个外壳——数字稍后从页面调用的内部 JSON 端点到达。解析渲染的 DOM 是脆弱且经常为空的。持久的方法是在浏览器的网络选项卡中找到该端点并直接调用它:它返回结构化字段(SKU、价格、店内可用性、送货上门、提货资格),无需任何 HTML 解析,并且比页面标记更少变化。如果你曾经看过抓取工具返回空页面,这通常就是原因。
import requests
# one sticky residential exit, pinned per store
SESSION_IP = "http://USER:PASS-session-store1841@gate.quantumproxies.io:8000"
proxies = {"http": SESSION_IP, "https": SESSION_IP}
s = requests.Session()
s.proxies = proxies
s.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/122.0.0.0 Safari/537.36",
"Accept": "application/json",
})
# 1) scope a store (ZIP or store id) on this session first,
# then 2) read the product/availability endpoint the page calls
r = s.get("https://www.example-retailer.com/api/v2/products/6565837",
params={"storeId": "1841", "zip": "10001"}, timeout=20)
data = r.json()
print(data["sku"], data["price"], data["inStoreAvailability"])
撇开占位符不谈,形状才是关键:设置店铺,访问数据端点,读取字段而不是抓取文本。一个带有粘性会话的住宅代理可以让店铺范围保持不变。

地理定价:相同 SKU,不同数字
大卖场的价格在全国范围内并不统一。清仓、地区促销和店铺特定的降价意味着相同的 SKU 在不同的邮政编码下可能有不同的价格,而店内可用性本质上是本地化的。如果你从一个位置抓取,你只会得到更大图景的一部分——对于需要准确监控达拉斯和西雅图购物者的竞争价格监控或补货提醒来说是无用的。
因此,故意驱动位置。维护一个目标邮政编码或店铺 ID 的列表,并将每一个与同一城市或州的区域内住宅出口配对。我们的位置覆盖涵盖 200 多个国家,支持城市和州定位,这让你可以在同一次运行中读取 Best Buy 的洛杉矶价格和 Target 的芝加哥库存。这是严肃的竞争价格监控和补货监控背后的相同原则。
分散负载,否则整天被封锁
单个 IP 请求数千个 SKU 是最快的被封锁、遇到 CAPTCHA 或子网封禁的方法。两个零售商都监控每个 IP 的请求速度。解决方法是将工作分散到一个轮换的住宅池中,以便没有单个出口承载可疑的流量,同时仍然在一个店铺的读取期间固定一个 IP。并发性存在于池级别,而不是会话级别。像购物者一样安排每个会话的节奏,让广度——许多 IP 各自做一点——为你提供吞吐量。如果你在此基础上构建补货工具,我们的最佳补货机器人代理综述涵盖了池大小。

当 API 路线胜出时
通过住宅代理直接请求为你提供最大的控制和最低的每次请求成本——一旦你知道端点并能维护它们,这是理想的选择。但当目标增加更重的反机器人防御、通过 JavaScript 渲染一切,或者你根本不想监控端点时,Scraper API 是捷径:发送产品 URL 和地理参数,让它轮换 IP,携带真实的浏览器指纹,渲染 JS 并返回结构化数据。你为零维护和在困难日子更高的成功率付出了一点每次调用的成本。诚实的分裂,详述在我们的JavaScript 密集型网站抓取指南中:原始请求加住宅代理用于干净、已知的端点;当防御升级时使用 API。
常见问题解答
你能抓取 Best Buy 和 Target 的产品数据吗?
可以——两者都公开产品、价格和可用性数据,其中大部分通过页面调用的内部 JSON 端点。你需要一个区域内的住宅 IP(Best Buy 仅服务于美国、加拿大和墨西哥)和一个确定的店铺或邮政编码,因为库存和价格通常是按店铺而不是按产品 URL 回答的。
为什么我得到的是全国价格而不是店铺价格?
因为你的会话中没有选择店铺。大卖场网站返回全国默认值,直到邮政编码或店铺 ID 确定请求范围。首先在粘性会话中设置位置,保持该店铺读取的相同住宅 IP,端点将返回本地价格和店内可用性。
哪些代理最适合大卖场零售抓取?
带有粘性会话和城市或州地理定位的住宅代理。你需要一个在确定店铺时保持一致的区域内出口,然后在池中轮换以分散 SKU 量。数据中心 IP 更便宜,但在这些目标上更容易被墙或遇到 CAPTCHA 挑战。
抓取 Best Buy 或 Target 合法吗?
在许多司法管辖区,收集公开可用的产品和价格数据通常被视为合理使用,但服务条款和当地法律各不相同。这是信息性的,而不是法律建议——在大规模收集或涉及个人数据的任何事情之前,请查看每个网站的条款并咨询专业人士。
大卖场数据是店铺形状的,而不是页面形状的。确定店铺范围,驱动地理位置,读取 JSON,并将负载分散到干净的住宅池中——做到这四点,Best Buy 和 Target 就会成为可靠的价格和库存数据流,而不是全国占位符的墙。