返回博客

用于解析Aviasales、Booking和Skyscanner的代理:如何在不被封锁的情况下收集价格

全面指南:选择和设置代理以监控旅行聚合器的价格:使用哪些类型的代理,如何避免封锁,以及如何从Aviasales、Booking、Skyscanner收集数据。

📅2026年3月9日

Aviasales、Booking、Skyscanner等旅游聚合网站积极防御自动数据采集——在10-20次请求后封禁IP,显示验证码,为机器人扭曲价格。如果您为自己的服务、联盟计划或市场分析监控机票或酒店价格,没有正确配置的代理,您的解析器将在几分钟内被封禁。

本指南将介绍稳定解析旅游网站需要哪些代理,如何配置IP轮换,绕过Cloudflare和Akamai反机器人系统,以及哪些错误会导致即使使用代理也被封禁。

为什么旅游聚合网站封禁解析及其方法

旅游聚合网站因解析而遭受实际损失:每次API请求都要花钱(他们向航空公司和酒店支付数据访问费用),而竞争对手使用采集的价格来吸引客户。因此Aviasales、Booking、Skyscanner、Kayak在反机器人保护上投资数百万。

检测解析的主要方法

1. 分析单个IP的请求频率。 普通用户每次会话进行3-5次搜索查询,解析器每分钟数百次。如果您的IP每分钟超过15-20次请求,系统会将其标记为可疑。50-100次请求后——封禁24小时或永久。

2. 浏览器指纹识别。 旅游网站收集数十个参数:屏幕分辨率、时区、已安装字体、WebGL指纹、canvas指纹、音频上下文。如果这些参数与声明的IP地理位置不符(例如,莫斯科IP但时区为UTC+8)——这是代理或VPN的标志。

3. IP信誉检查。 网站使用已知代理提供商、数据中心、VPN服务器的数据库。如果您的IP列在这些数据库中(例如MaxMind GeoIP2、IPQualityScore、SEON),请求将被封禁或显示验证码。Booking和Skyscanner对来自Amazon AWS、Google Cloud、DigitalOcean范围的IP特别严格。

4. 行为分析。 反机器人系统跟踪鼠标移动、滚动速度、点击之间的暂停。未打补丁的Selenium和Puppeteer会留下痕迹:navigator.webdriver属性、缺少插件、非典型窗口大小。即使使用代理,这种流量也很容易识别。

5. TLS指纹识别。 现代反机器人系统(Cloudflare、Akamai)分析TLS握手参数:cipher suites顺序、扩展、协议版本。Python requests和标准库的TLS指纹与浏览器不同——这会立即暴露机器人。

真实案例: 我们的一位客户通过100个数据中心代理(DigitalOcean)解析Booking价格。工作2小时后,所有IP被永久封禁——Booking检测到数据中心范围并添加到黑名单。切换到住宅代理解决了问题:一个月工作——零封禁。

适合价格监控的代理类型:比较

解析旅游聚合网站使用三种类型的代理:住宅代理、移动代理和数据中心代理。每种类型都有其优缺点和应用场景。选择取决于解析量、预算和匿名性要求。

代理类型 网站信任级别 速度 成本(相对) 最适合
住宅代理 非常高(家庭用户IP) 中等(300-800毫秒) $$$(按流量) Booking、Expedia、Airbnb——具有严格保护的网站
移动代理 最高(移动运营商IP) 低(500-1500毫秒) $$$$(最贵) 解析移动版本、API请求、绕过Cloudflare
数据中心代理 低(易于检测) 非常高(50-150毫秒) $(最便宜) Aviasales API、保护较弱的聚合器、测试

特定旅游网站的选择特点

Aviasales和Skyscanner——对通过API解析相对宽容(如果您有合作伙伴访问权限)。对于网页解析,每5-10次请求轮换的住宅代理就足够了。数据中心代理可以工作,但需要大量IP池(至少500个地址)和慢速轮换(单个IP不超过30秒1次请求)。

Booking.com和Expedia——使用具有严格规则的Cloudflare Enterprise。即使慢速解析,数据中心代理在90%的情况下也会被封禁。只需要住宅或移动代理,加上真实浏览器模拟(Selenium Stealth、带插件的Puppeteer Extra)。IP轮换——每3-5次请求后。

Airbnb——最受保护的网站之一。需要与搜索查询匹配的地理位置的住宅代理(如果搜索巴黎的酒店——IP必须是法国的)。必须有cookies、referrer、浏览器标头。移动代理在通过移动API解析方面显示出最佳结果。

Kayak和Momondo——中等保护级别。住宅代理是最佳选择。可以使用数据中心代理,但必须轮换并在请求之间延迟(至少10-15秒)。

住宅代理vs数据中心代理:旅游网站选择什么

住宅代理与数据中心代理的主要区别是IP地址来源。住宅代理使用真实家庭互联网提供商的IP(Rostelecom、MTS、Comcast、Verizon),数据中心代理使用托管公司服务器的IP(AWS、Google Cloud、OVH)。旅游网站信任住宅IP,因为普通用户使用它们。

何时必须使用住宅代理

1. 解析带有Cloudflare/Akamai的网站。 Booking、Expedia、Airbnb使用这些系统——它们自动封禁95%的数据中心IP。住宅代理通过检查,因为它们的IP不在代理提供商数据库中。

2. 收集与地理位置相关的价格。 旅游网站向来自不同国家和城市的用户显示不同价格(由于税收、汇率、本地促销)。如果您需要特定地区的价格(例如,德国居民的价格),带有德国IP的住宅代理是唯一可靠的选择。

3. 长期解析无封禁。 如果您24/7监控价格数月,住宅代理会收回成本——您不会浪费时间更换被封禁的IP和配置新代理。

何时可以使用数据中心代理

1. 通过官方API解析。 如果您有Aviasales API、Skyscanner API的合作伙伴访问权限——代理类型不重要,API对IP来源不太敏感。数据中心代理将提供高速度和低成本。

2. 测试和开发解析器。 在编写和调试代码阶段使用数据中心代理——它们更便宜、更快,即使几个IP被封禁也不可惜。

3. 解析保护较弱的聚合器。 一些区域旅游网站或巴士票聚合器不使用先进的反机器人保护。对它们来说,具有大量IP池和慢速轮换的数据中心代理完全适合。

建议: 组合代理类型。对关键请求使用住宅代理(首次搜索、获取令牌、绕过验证码),对API或保护较弱端点的大量请求使用数据中心代理。这将在保持稳定性的同时降低40-60%的成本。

IP轮换策略:解析时多久更换代理

正确的IP轮换是长期解析无封禁的关键。如果更换IP太频繁,您将快速耗尽地址池并产生高流量费用。如果太少——会在一个IP上积累可疑活动并被封禁。

代理轮换类型

1. 按请求轮换(rotating proxies)。 IP在每次请求后或通过指定数量的请求后自动更改。大多数住宅代理提供商提供此模式:您连接到一个端点(例如gate.proxycove.com:8000),IP在提供商端更改。

优点: 配置简单,无需手动管理IP池,单个IP被封禁的风险最小。
缺点: 无法控制会话(如果需要保存cookies或令牌),每次请求=新IP=新流量费用。

2. 粘性会话(sticky sessions)。 IP在一定时间内(通常10-30分钟)固定到您的会话。您使用一个IP进行多次请求,然后它自动更改。通过代理参数配置(例如,在登录中添加session-id123)。

优点: 可以在会话内保存cookies和令牌,流量消耗更少(一个IP=多次请求)。
缺点: 如果IP在会话期间被封禁,该会话中的所有后续请求都将被阻止。

3. 从池中手动轮换。 您获得IP地址列表(例如1000个)并在解析器代码中管理轮换:从列表中选择随机IP,进行N次请求,切换到下一个。典型用于数据中心代理。

优点: 完全控制轮换,可以从池中排除被封禁的IP。
缺点: 需要在代码中编写轮换逻辑,管理IP状态(哪些已使用,哪些被封禁)。

旅游网站推荐的轮换频率

网站 代理类型 轮换频率 单个IP最大请求数
Booking.com 住宅 3-5次请求后 5-7
Expedia 住宅 5-8次请求后 8-10
Airbnb 住宅/移动 2-4次请求后 3-5
Aviasales 住宅/数据中心 10-15次请求后 15-20
Skyscanner 住宅/数据中心 8-12次请求后 12-15
Kayak 住宅 5-10次请求后 10-12

重要: 这些是平均值。实际限制取决于一天中的时间(夜间反机器人系统更严格)、请求类型(搜索机票=比查看酒店对API的负载更大)、浏览器模拟质量。从保守值开始(每个IP更少请求),然后逐渐增加,跟踪封禁百分比。

代理地理定位:为什么IP地址的国家和城市很重要

旅游网站根据用户的地理位置显示不同价格。这不是错误,而是商业模式:航空公司和酒店为不同市场设定不同费率。例如,莫斯科-纽约的机票对俄罗斯用户可能是600美元,对美国用户是750美元(由于税收、竞争、购买力)。

网站如何确定地理位置

1. 通过IP地址。 主要方法。网站使用GeoIP数据库(MaxMind、IP2Location),将IP与城市、地区、国家匹配。城市确定准确度——70-90%,国家——95-99%。

2. 通过浏览器语言和时区。 如果IP显示德国,但浏览器语言是俄语,时区是UTC+3(莫斯科)——这是代理的标志。网站可能显示验证码或阻止请求。

3. 通过货币和账户设置。 如果您登录Booking账户,网站在注册时记住了您的国家。将IP更改为另一个国家会引起怀疑——Booking可能要求确认身份或封禁账户。

如何正确选择代理地理位置

收集特定市场价格: 使用您感兴趣价格的国家的IP。如果您监控俄罗斯市场价格——使用俄罗斯住宅代理。对于欧洲市场——来自欧盟国家的代理(德国、法国、波兰)。对于美国——美国代理。

绕过地理封锁: 某些旅游网站或特别优惠仅在特定国家可用。例如,从美国IP预订时,美国国内航班通常更便宜。使用所需国家的代理+将浏览器语言和时区配置为该国家。

解析全球数据: 如果您需要所有市场的价格(例如用于分析),使用来自不同国家的代理池。与IP一起轮换地理位置:德国IP请求→德国价格,法国IP请求→法国价格。

错误: 使用一个国家的IP,但搜索另一个国家的酒店/机票,货币不匹配。例如,俄罗斯IP,搜索泰国酒店,货币——欧元。这看起来很可疑。要么使用目的地国家的IP,要么使用您真实国家的IP及其货币。

为流行解析器和脚本配置代理

让我们看看为最流行的旅游网站解析工具配置代理。示例针对带轮换的住宅代理,但也适用于其他类型。

Python + requests / httpx

解析API或没有JavaScript的简单页面的最简单选项。适用于Aviasales API、Skyscanner API、没有Cloudflare的简单端点。

import requests

# 代理数据(替换为您的)
proxy_host = "gate.proxycove.com"
proxy_port = "8000"
proxy_user = "your_username"
proxy_pass = "your_password"

proxies = {
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}

# 浏览器标头(必须!)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Referer": "https://www.google.com/"
}

# 通过代理请求
response = requests.get(
    "https://www.aviasales.com/search",
    proxies=proxies,
    headers=headers,
    timeout=30
)

print(response.status_code)
print(response.text[:500])  # 响应的前500个字符

重要: 对于带轮换的住宅代理,每个新请求将自动获得新IP。如果需要粘性会话(一个IP用于多个请求),在用户名中添加session ID:your_username-session-12345

Selenium(用于带JavaScript的网站)

Booking、Expedia、Airbnb积极使用JavaScript进行内容渲染和反机器人检查。Selenium模拟真实浏览器,但需要额外配置以绕过检测。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# Chrome设置
chrome_options = Options()

# 代理
proxy_host = "gate.proxycove.com"
proxy_port = "8000"
proxy_user = "your_username"
proxy_pass = "your_password"

# Chrome代理格式
chrome_options.add_argument(f'--proxy-server=http://{proxy_host}:{proxy_port}')

# 隐藏自动化
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

# User-Agent
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')

driver = webdriver.Chrome(options=chrome_options)

# 移除webdriver属性
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# 代理授权(如果需要)
# Chrome需要创建带授权的扩展,参见selenium-wire或更简单地使用Puppeteer

driver.get("https://www.booking.com/")
print(driver.title)
driver.quit()

问题: Chrome不直接支持通过login:password进行代理授权。解决方案:使用selenium-wire库(添加带授权的代理),创建用于授权的Chrome扩展,或使用Puppeteer(Node.js)。

Puppeteer(Node.js)——复杂网站的最佳选择

Puppeteer比Selenium更好地模拟浏览器,并且易于配置代理授权。推荐用于Booking、Airbnb、Expedia。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=http://gate.proxycove.com:8000',
      '--disable-blink-features=AutomationControlled',
      '--no-sandbox'
    ]
  });

  const page = await browser.newPage();

  // 代理授权
  await page.authenticate({
    username: 'your_username',
    password: 'your_password'
  });

  // 隐藏webdriver
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    });
  });

  // User-Agent
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');

  await page.goto('https://www.booking.com/', { waitUntil: 'networkidle2' });
  
  const title = await page.title();
  console.log('Title:', title);

  await browser.close();
})();

为了更好地防止检测,使用puppeteer-extra-plugin-stealth插件——它自动隐藏所有自动化迹象。

现成解决方案:Scrapy、Crawlee

Scrapy(Python)——大规模解析框架。通过中间件支持代理。settings.py中的配置示例:

# settings.py
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
}

# 在spider中
class TravelSpider(scrapy.Spider):
    def start_requests(self):
        proxy = "http://your_username:your_password@gate.proxycove.com:8000"
        yield scrapy.Request(
            url="https://www.aviasales.com/",
            meta={'proxy': proxy},
            callback=self.parse
        )

Crawlee(Node.js)——具有内置代理轮换、反机器人系统绕过、自动重试的现代框架。非常适合旅游网站。

绕过Cloudflare、PerimeterX、Akamai反机器人系统

即使使用高质量的住宅代理,如果不正确绕过反机器人系统,您也可能遇到封禁。Booking使用Cloudflare,Airbnb使用PerimeterX,一些网站使用Akamai Bot Manager。这些系统不仅分析IP,还分析行为、浏览器指纹、TLS握手。

Cloudflare:主要绕过方法

1. 使用浏览器自动化。 Cloudflare检查在浏览器中执行的JavaScript挑战。简单的HTTP请求(requests、curl)无法通过检查。需要Puppeteer、Playwright或带正确设置的Selenium。

2. 隐藏自动化迹象。 安装puppeteer-extra-plugin-stealth(Node.js)或undetected-chromedriver(Python)。这些库修补浏览器,移除navigator.webdriverwindow.chrome属性,更改permissions API。

3. 正确的TLS指纹。 Cloudflare分析TLS握手。使用模拟浏览器TLS的库:curl-impersonate(模拟Chrome/Firefox TLS)、tls-client(Go)、hrequests(Python)。

4. 自动解决验证码。 如果Cloudflare显示验证码(Turnstile),使用验证码解决服务:2Captcha、Anti-Captcha、CapSolver。它们通过API集成,每1000次解决成本为1-3美元。

PerimeterX(Airbnb,一些旅游网站)

PerimeterX是最复杂的反机器人系统之一。它分析用户行为(鼠标移动、点击、滚动),创建设备指纹,检查cookies和localStorage。

绕过方法:

1. 模拟用户行为。 在操作之间添加随机暂停(2-5秒),移动鼠标,滚动页面。在Puppeteer中使用ghost-cursor库进行真实的鼠标移动。

2. 保存cookies和localStorage。 PerimeterX生成存储在cookies(_px3、_pxhd)和localStorage中的令牌。如果您更改IP但保留cookies——这很可疑。要么更改IP+清除cookies,要么使用粘性会话(一个IP=一个带cookies的会话)。

3. 使用移动代理。 PerimeterX对数据中心IP更严格。移动代理在绕过PerimeterX方面显示出最佳结果。

Akamai Bot Manager

Akamai分析传感器数据(移动设备上的加速度计、陀螺仪)、WebGL指纹、音频上下文、设备性能。绕过需要高级浏览器模拟。

建议: 使用真实浏览器(非headless)、移动代理,添加随机延迟,模拟传感器事件(触摸事件)。对于复杂情况——使用浏览器农场(BrowserStack、LambdaTest)或反检测浏览器(AdsPower、Multilogin)。

通过代理解析旅游网站的典型错误

即使是经验丰富的开发人员也会犯导致封禁的错误。以下是最常见的问题及其解决方案。

错误1:对所有请求使用一个User-Agent

如果您的所有请求都使用相同的User-Agent(例如,标准Python requests:python-requests/2.28.0),这会立即暴露机器人。即使您更改IP,网站也会看到相同的UA并关联请求。

解决方案: 使用真实浏览器User-Agent列表(Chrome、Firefox、Safari)并轮换它们。fake-useragent库(Python)自动生成随机UA。

错误2:请求速度过快

解析器每秒发出100个请求——这对人类来说是物理上不可能的。即使使用不同的IP,反机器人系统也会通过模式检测异常活动(所有请求恰好每0.01秒到达一次)。

解决方案: 在请求之间添加随机延迟:time.sleep(random.uniform(2, 5))。对于旅游网站最佳:单个IP请求之间2-5秒,不同IP请求之间0.5-2秒。

错误3:忽略cookies和会话

旅游网站使用cookies跟踪会话、存储反机器人系统令牌、个性化价格。如果您每次请求都不带cookies(作为新用户),这很可疑。

解决方案: 使用requests.Session()(Python)或在Puppeteer中保存请求之间的cookies。对于粘性会话(一个IP=多个请求),必须保存cookies。

错误4:IP地理位置与浏览器参数不匹配

德国IP,但浏览器语言是俄语,时区是UTC+3,货币是卢布。反机器人系统看到这种不匹配并阻止请求。

解决方案: 将浏览器参数与代理地理位置同步。如果使用德国IP——设置德国语言(Accept-Language: de-DE)、时区Europe/Berlin、货币EUR。

错误5:使用免费或低质量代理

免费代理和廉价公共代理已在所有主要旅游网站上被封禁。它们的IP列在黑名单中,声誉不佳(曾用于垃圾邮件、DDoS)。

解决方案: 使用来自可靠提供商的高质量住宅或移动代理。使用前通过IPQualityScore、Scamalytics等服务检查IP声誉。

启动解析器前的检查清单:
✅ 代理——住宅或移动,具有所需地理位置
✅ User-Agent——真实浏览器,轮换
✅ Cookies——在会话内保存
✅ 延迟——请求之间2-5秒
✅ IP轮换——3-10次请求后(取决于网站)
✅ 地理位置——IP国家与浏览器语言/时区匹配
✅ 反检测——使用stealth插件或undetected浏览器

结论

成功监控旅游聚合网站价格需要正确的代理选择、智能轮换策略和彻底的反检测措施的组合。住宅和移动代理提供最高的成功率,特别是对于Booking、Expedia和Airbnb等受保护的平台。

记住要将您的代理地理位置与浏览器参数匹配,实施适当的请求延迟,并使用现代反检测工具。虽然初始设置可能看起来很复杂,但投资于高质量代理和正确配置将在长期内通过稳定、不间断的数据收集获得回报。

从小规模开始,监控您的成功率,并根据每个目标网站的具体要求逐步优化您的方法。通过正确的工具和策略,您可以维护可靠的价格监控系统,为您的业务或分析需求提供有价值的市场洞察。