住宅代理

抓取机票和酒店价格:为什么票价因地点而异

同一航班或房间的价格因购物者所处的位置不同而不同。要获取每个市场的真实价格,需要从该市场进行抓取。

Matt Brown

Matt Brown

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

搜索同一个航班两次,一次以某个国家的购物者身份,一次以另一个国家的购物者身份,你往往会得到两个不同的价格。这不是一个故障。机票和酒店价格是按市场设定的,而旅游网站将你归入哪个市场,很大程度上取决于你的连接看起来来自哪里。这一事实决定了收集旅游价格的一切:如果你想要某个国家的客户实际看到的票价,你就必须从该国境内进行查看。住宅代理正是实现这种规模化操作的方式,这也是它对任何构建票价追踪、价格比较或旅游价格情报的人来说的用武之地。

旅游团队在收集什么

有用的数据是价格和可用性,会随时间反复采样。在航空方面,这意味着某个出发地、目的地和日期的票价,按舱位等级和客舱细分,加上座位可用性以及价格随着出发日期临近如何变化。在住宿方面,则是按日期、入住人数和房型划分的每晚房价,涵盖直营网站和聚合平台。围绕这两者的,是一层竞争和市场调研工作:某条航线或某个酒店在不同地区如何定价、促销活动如何因国家而异、动态定价如何逐时变化。所有这些都是公开的购物数据,而且都依赖于能够还原出某个特定地点的真实旅行者所看到的内容。

为什么价格取决于你从哪里查看

航空公司通过许多销售点销售同一个座位,每个销售点都有自己的价格。在货币因素介入之前,为某个国家销售而登记的票价,可能与为另一个国家登记的相同航班的票价不同,因为航空公司会针对各自市场的需求和竞争进行定价。然后货币和当地税费再叠加其上,而网站判断你属于哪个市场,主要依据你的IP地址,有时还会参考你所呈现的货币和语言区域设置来加以确认。酒店和聚合平台也以各自的方式做同样的事:区域性促销、特定货币的价格,以及按市场调整的可用性。

这对数据收集的影响是直接的。如果只从单一地点抓取所有航线,那么无论你覆盖多少航线,你始终只是在采样一个销售点。另一个国家的购物者所看到的价格,对你来说是不可见的,因为网站永远不会把它展示给你所来自的那个地址。要看到它,你的请求就必须从那个购物者所在的地方发出。

触达每个市场:国家和城市定位

这正是住宅代理如此适合旅游定价的核心原因。带有国家定位功能的住宅代理可以让你把每个请求放置在你想要的价格所在的那个市场,从而收集该国真实的销售点票价,而不是单一本国市场的视角。构建一个你关心的市场矩阵,从每个市场运行相同的搜索,你得到的就是真实的分市场情况,而不是一个有偏差的单一样本。在价格或可用性在国家层面以下也存在差异的地方,城市级定位可以进一步收窄范围。这正是利用地理定位获取因地区而异的公开数据的合法用途:你收集的是每个市场公布的价格,而不是在规避某种限制。让你所呈现的货币和语言区域设置与你所在的国家出口相匹配,这样市场信号就会保持一致,而不是相互矛盾。

绕过旅游网站的防护

旅游行业是网络上防护较为严密的角落之一。航空公司和聚合平台网站不断遭遇自动化票价查询,它们也强力反制:数据中心IP段很快会被封禁,任何看起来不像普通旅行者的流量都会被质询或得到降级的结果。从数据中心地址运行的抓取工具,往往会遇到封锁和质询页面,而拿不到票价。

住宅代理通过真实的家庭级IP进行路由,所以每个请求看起来都像是一名普通旅行者在家中购物,而不是数据中心里的一台服务器,一个干净、拥有良好信誉的地址能够通行,而被标记的地址则会遭到质询。IP让你进得了门,剩下的就是表现得像一个真实的客户端:合理的请求频率、对触发封锁的信号的妥善处理,以及抓取防护严密的网站时所需的一般纪律。目标是像一个真人那样购物,且规模不会被任何单一目标察觉。

保持搜索的连贯性:粘性会话

一次旅游搜索很少只是一个请求。你搜索一条航线,落到结果页面,再深入查看某个票价或某个房间,网站会在这些步骤之间保持状态,有时还会把报出的价格与产生它的会话绑定在一起。如果你的IP在这个流程中途轮换,你要么打断会话,要么被识别为可疑,因为真实的旅行者不会在点击搜索和查看票价之间切换国家。解决办法是每次搜索使用一个粘性会话:在整个多步骤流程中保持同一个IP,使搜索从查询到报价保持连贯,然后为下一次搜索切换到一个全新的会话。在各次搜索之间轮换以分散负载;在一次搜索内部保持粘性以维持其完整性。

规模与时效:价格持续变动

旅游价格是动态的,这使得数据收集成为一项持续性的工作,而非一次性的抓取。一个有用的数据集会按计划对众多航线、日期和房源重新采样,因为今天早上抓到的票价,到了下午可能就已经过时。如果这种规模的抓取来自太少的地址,就会直接撞上单个IP的速率限制,因此要把它分散到整个代理池中:每个IP都保持在其限制范围内,而你的总吞吐量却能扩展,这正是任何大规模数据收集器背后的负载均衡逻辑,也是无限并发连接存在的意义。用监控来保持流水线的诚实:每个市场的成功率和覆盖率,能在目标改变防护措施或某个地区悄悄停止返回数据时告诉你,早于这个缺口在你的价格历史中显现为一个空洞之前。由于旅游结果对延迟可能很敏感,借助信誉良好的出口降低延迟有助于让最新鲜的价格第一时间到达。

负责任地收集

诚实地说一句。如果某家航空公司、连锁酒店或聚合平台提供官方API、合作伙伴数据源,或者你有权访问的GDS连接,那才是更好的路径:它结构化、更快,且在提供方的条款范围之内。住宅代理是用来大规模收集网站向普通购物者展示的公开价格的,不是用来强行获取提供方已经关闭的访问权限的。坚持使用公开的购物数据,遵守每个网站的服务条款和robots指令,礼貌地爬取,永远不要让你所依赖的网站性能变差。这是价格情报和市场调研,是对已公布票价和房价的收集,而不是预订自动化、抢票机器人,或任何进行实际交易的行为。守住这条界线,才能让一个旅游价格数据集站得住脚。

一个最小化的国家定位抓取示例

定位信息存在于网关的用户名中。固定一个国家并保持一个会话标识符,使一次搜索从你想要的市场中的一个IP运行:

import requests

# One sticky IP in Germany for the whole search flow
PROXY = ("http://customer-USERNAME-country-de-sid-search8123:"
         "PASSWORD@p.shifter.io:443")
proxies = {"http": PROXY, "https": PROXY}

r = requests.get(
    "https://www.example-travel.com/search?from=BER&to=JFK&date=2026-09-10",
    proxies=proxies,
    timeout=20,
    headers={"Accept-Language": "de-DE"},   # match locale to the market
)
r.raise_for_status()
print(r.text)

在一组国家目标上运行相同的搜索来构建分市场矩阵,让每个多步骤搜索保持在自己的粘性会话中,并按计划重新采样以追踪价格如何变动。通用的客户端模式可以从在Python中使用住宅代理指南中沿用过来,而更广泛的方法则与持续进行的价格监控另类数据收集相呼应。

结论

机票和酒店价格是按市场设定的,而你所看到的市场是由你的连接看起来所在的位置决定的,因此准确地收集它们,首先是一个地理问题,其次才是别的什么。从一个地方抓取,你只能采样一个销售点;要看到每个市场实际支付的价格,请求就必须来自那个市场。住宅代理正好解决了这一点:用国家和城市定位来收集每个市场的真实价格,用粘性会话来保持多步骤搜索的连贯性,用庞大的代理池在单个IP限制之内分散持续的重新采样,用干净的家庭级IP来绕过那些为阻止数据中心票价查询者而建立的防护。在有官方API的地方优先使用它,坚持使用公开数据和每个网站的条款,让代理层去做它该做的事:像一个普通旅行者那样触达每一个市场。

这一层正是住宅代理所提供的,一个由真实家庭级IP组成的庞大代理池,具备国家和城市定位功能,并在搜索需要时提供粘性会话。按GB计费的定价意味着你只为实际拉取的价格数据付费,这适合那种在众多市场同时进行的小规模、高频次票价和房价检查工作负载。

准备好开始了吗?

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

立即开始