住宅代理

使用住宅代理大规模监控产品可用性和库存状态

库存状态变化很快,且因市场而异,全国有货可能在某个地区却已售罄。以下是如何按地区大规模监控可用性的方法。

Chris Collins

Chris Collins

2026年8月18日 · 1 分钟阅读

价格最受关注,但对零售、品牌和市场调研团队来说,库存情况往往是更紧迫的信号。一款产品是否有货、何时补货、在哪些地方有货,这些变化可能比价格本身更快、更重要。而库存有一个会让粗放式监控栽跟头的特性:它因市场而异。一款在全国范围内显示有货的产品,可能在某个地区已售罄,或者仅在特定城市可自提,因为零售商展示的内容很大程度上取决于购物者所处的位置。要在众多产品和地区范围内准确监控库存,并且频率足以捕捉到补货时机,这正是住宅代理的用武之地,也是它们与这一需求契合的方式。

库存监控实际追踪的内容

这个信号不只是一个简单的”有货/无货”标志。有用的监控会追踪每个 SKU 在各个销售网站上的库存状态,捕捉缺货商品重新上架的补货事件,并在网站披露的情况下捕捉低库存或限量提示。它会按履约方式(配送与自提)、按门店或地区(如果有差异)追踪库存情况。它会跟踪具体到规格级别的库存,即真正可购买的具体尺码、颜色或配置,而不仅仅是列出的商品。在市场平台上,它会关注哪些卖家有某件商品以及商品的成色状况。所有这些都需要反复采样,因为一小时前捕捉到的状态可能已经过时。

为什么库存是一个地理问题

零售商通过位置这一视角来回答库存问题。配送预估、自提选项、区域仓库、门店级库存,全都是根据请求看起来来自何处来解析的,这一判断依据 IP,有时还依据用户选择的门店或邮编。同一个商品列表对一个地方的购物者可能显示有货,对另一个地方的购物者则显示无货,这并非数据有误,而是他们看到的是两种不同的区域答案。

这对监控的影响,与影响价格采集的因素是一样的:如果只从单一地点检查所有产品,无论覆盖多少 SKU,你了解到的都只是那一个地区的库存情况。要知道某件商品对特定市场的购物者来说是否有货,你的请求就必须看起来像是来自那个市场。国家级别,以及在门店或区域库存差异更细的情况下的城市级定位,能让你像每个地方的真实购物者一样查看库存,这正是利用地理定位获取因地区而异的公开数据的合理用途。要建立你关心的市场集合并逐一检查,而不是把你所在地区的库存误认为是全貌。

速度与时效性:补货不等人

库存是零售数据中时效性最强的一种。一款热门商品补货后,可能几分钟内就会售罄,因此采样过慢或报告滞后的监控系统,会错过它本应捕捉的事件。这对流程提出了两点要求。它必须频繁轮询,并且必须是低延迟的,这样你读到的状态才是最新的,并且能在信息仍有价值时到达你手中。一个干净的、低延迟、出口靠近目标且信誉良好的代理池,能减少每次检查落地时的信息滞后程度,而快速检测到的变化,才是有用警报与”马后炮”记录之间的区别。

规模:众多 SKU、众多地区、频繁检查

对众多产品、众多网站、众多地区进行频繁轮询,累积起来的请求量,一旦来源 IP 地址太少,就会立刻突破单 IP 的速率限制。解决办法是分散请求。将检查分布到庞大的住宅代理池中,能让每个 IP 都保持在自身限制之内,同时你的总吞吐量随着代理池规模扩大而扩大,这正是任何高流量采集系统背后的负载均衡逻辑,也是无限并发连接存在的意义所在。目标不是猛攻某个零售商,而是运行一次大规模、有礼貌的监控扫描,分散到足够多的地址上,让任何单个网站都感觉不到超出寻常水平的流量。

突破零售防护

高需求零售网站防护严密,正是因为库存监控和自动化购买在人们最关注的那些产品上极为常见。数据中心 IP 段很快就会被封锁,而看起来不像普通购物者的流量,则会被质询,或被返回一个过时或通用的页面,而非真实的库存状态。从数据中心地址运行的监控,往往收获的是封锁而非答案。

住宅代理通过真实的家庭级 IP 路由,因此每次检查看起来都像是一个普通购物者从家中访问,一个干净且信誉良好的地址能够通过,而被标记的地址则会被质询。IP 为你换来一个真实的页面,剩下的就是要表现得像一个真实客户端:合理的请求速率、对触发封锁的信号的诚实处理,以及抓取重度防护网站时的一般规范。目标是读取到与普通顾客所见相同的库存情况,而流量对任何单一目标来说都不会被察觉。

保持定位:粘性会话

检查门店或区域库存,通常意味着要先设置一个上下文,比如选择一个门店或输入一个邮编,然后读取该上下文返回的库存情况。如果你的 IP 在这个流程中途发生变化,位置设置就会重置,或者会话就会中断,你又会回到一个通用的答案。粘性会话会在该上下文的生命周期内保持同一个 IP,使你设置的门店或区域在整个检查过程中保持不变,然后由一个全新的会话处理下一个位置。在代理池中轮换以分散高频轮询;在单个位置上下文内保持粘性以保证其答案的连贯性。

可靠性:沉默的监控会错过事件

一个悄无声息停止工作的库存监控,比没有监控更糟糕,因为它恰恰在发生变化的时候什么都没报告。持续监控必须能扛过那些会失效的线路,也就是要检测某个 IP 上的封锁、超时或质询,淘汰那条线路,然后用一个全新的线路继续下去,这正是保持长期扫描持续运行的故障转移模式。此外,监控这个监控系统本身:按网站和地区统计的成功率和覆盖率,能在目标改变防护措施或扫描的某一部分陷入沉默之前,提前告诉你出了问题,而不是等到错过一次补货才暴露漏洞。

负责任地进行监控

这条诚实的底线,在这里比通常更为重要。如果零售商或市场平台提供官方产品或库存 API、联盟数据源,或者你有权访问的合作伙伴集成,那才是更好的路径:结构化、更快,而且符合他们的条款。住宅代理是用来读取网站向普通购物者展示的公开库存情况的,是为了规模化,而不是为了强行访问服务商已经关闭的通道。坚持使用公开数据,遵守每个网站的服务条款和 robots 指令,并礼貌地轮询,这样你才不会拖累你所依赖的网站。同时要在监控与交易之间保持清晰的界限:这是为了商品运营、竞争情报和市场调研,或诚实的补货提醒而观察库存状态,而不是为了将结账流程自动化,或与真实顾客抢购限量库存。查看库存是采集,而购买自动化是另一回事,本文讨论的是前者。

一个最简版的分地区检查

定位信息存放在网关的用户名中。锁定一个国家,保持一个会话以固定所选的门店或邮编,并按计划轮询:

import time
import requests
# One sticky IP in the US market for a given store/region context
PROXY = ("http://customer-USERNAME-country-us-sid-store4471:"
"PASSWORD@p.shifter.io:443")
proxies = {"http": PROXY, "https": PROXY}
def check(url):
r = requests.get(url, proxies=proxies, timeout=15,
headers={"Accept-Language": "en-US"})
r.raise_for_status()
return "in stock" if "InStock" in r.text else "out of stock"
while True: # poll on a schedule
status = check("https://shop.example.com/product/ABC123")
record(status) # detect the change, alert on restock
time.sleep(30) # be polite; tune per target

对一组国家或城市目标运行相同的检查,以构建各市场的库存全貌,让每个门店或区域上下文都拥有自己的粘性会话,并以足够高的频率重新采样以捕捉补货情况,同时不对任何一个网站造成过度冲击。通用的客户端模式,可以参照在 Python 中使用住宅代理这篇指南,而更广泛的方法则与持续进行的价格监控另类数据采集如出一辙。

结论

库存变化迅速、时效性强,并且按市场分别决定,因此准确监控库存首先是一个地理和速度问题,其次才是别的。只从一个地方检查,你了解到的只是一个地区的库存;要知道每个市场的库存情况,请求就必须来自那个市场,而要捕捉到补货,检查就必须频繁且新鲜。住宅代理能解决所有这些问题:国家和城市定位用于读取每个市场的真实库存;粘性会话用于保持所选的门店或地区;庞大的代理池用于在单 IP 限制内分散频繁轮询;低延迟的干净 IP 用于快速捕捉变化并突破零售防护;故障转移加监控确保扫描不会陷入沉默。在有官方数据源的情况下优先使用它,坚持使用公开数据并遵守每个网站的条款,把监控与购买分开,让代理层去做它该做的事:像每个市场的购物者那样查看库存。

这一层正是住宅代理所提供的:一个由真实家庭级 IP 组成的庞大代理池,配备国家和城市定位,以及在需要固定位置上下文时可用的粘性会话。按 GB 计费的定价方式意味着你只为实际运行的检查付费,这适合那种同时分散在众多产品和市场上、由小而频繁的库存轮询组成的工作负载。

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.75/GB。

立即开始