Travel-агрегаторы типа Aviasales, Booking, Skyscanner активно защищаются от автоматического сбора данных — блокируют IP после 10-20 запросов, показывают капчи, искажают цены для ботов. Если вы мониторите цены на авиабилеты или отели для своего сервиса, партнёрской программы или аналитики рынка, без правильно настроенных прокси вы получите бан уже через несколько минут работы парсера.
В этом руководстве разберём, какие прокси нужны для стабильного парсинга travel-сайтов, как настроить ротацию IP, обходить антибот-системы Cloudflare и Akamai, и какие ошибки приводят к блокировкам даже при использовании прокси.
Почему travel-агрегаторы блокируют парсинг и как они это делают
Travel-агрегаторы несут реальные убытки от парсинга: каждый запрос к их API стоит денег (они платят авиакомпаниям и отелям за доступ к данным), а конкуренты используют собранные цены для переманивания клиентов. Поэтому Aviasales, Booking, Skyscanner, Kayak инвестируют миллионы в антибот-защиту.
Основные методы обнаружения парсинга
1. Анализ частоты запросов с одного IP. Обычный пользователь делает 3-5 поисковых запросов за сессию, парсер — сотни в минуту. Если с вашего IP приходит больше 15-20 запросов за минуту, система помечает его как подозрительный. После 50-100 запросов — блокировка на 24 часа или навсегда.
2. Fingerprinting браузера. Travel-сайты собирают десятки параметров: разрешение экрана, часовой пояс, установленные шрифты, WebGL-отпечаток, canvas fingerprint, аудио-контекст. Если эти параметры не соответствуют заявленной геолокации IP (например, IP из Москвы, а часовой пояс UTC+8) — это признак прокси или VPN.
3. Проверка IP-репутации. Сайты используют базы данных известных прокси-провайдеров, датацентров, VPN-серверов. Если ваш IP числится в таких базах (например, MaxMind GeoIP2, IPQualityScore, SEON), запросы блокируются или показывается капча. Booking и Skyscanner особенно строги к IP из диапазонов Amazon AWS, Google Cloud, DigitalOcean.
4. Поведенческий анализ. Антибот-системы отслеживают движения мыши, скорость скроллинга, паузы между кликами. Selenium и Puppeteer без дополнительных патчей оставляют следы: свойство navigator.webdriver, отсутствие плагинов, нетипичные размеры окна. Даже с прокси такой трафик легко распознать.
5. TLS-fingerprinting. Современные антибот-системы (Cloudflare, Akamai) анализируют параметры TLS-рукопожатия: порядок cipher suites, расширения, версию протокола. У Python requests и стандартных библиотек TLS-fingerprint отличается от браузеров — это мгновенно выдаёт бота.
Реальный случай: Один из наших клиентов парсил цены на Booking через 100 прокси дата-центров (DigitalOcean). Через 2 часа работы все IP были заблокированы навсегда — Booking детектировал диапазон датацентра и добавил в чёрный список. Переход на резидентные прокси решил проблему: за месяц работы — ноль блокировок.
Какие типы прокси подходят для мониторинга цен: сравнение
Для парсинга travel-агрегаторов используются три типа прокси: резидентные, мобильные и прокси дата-центров. У каждого типа свои плюсы, минусы и сценарии применения. Выбор зависит от объёма парсинга, бюджета и требований к анонимности.
| Тип прокси | Уровень доверия сайтов | Скорость | Стоимость (условно) | Лучше всего для |
|---|---|---|---|---|
| Резидентные прокси | Очень высокий (IP домашних пользователей) | Средняя (300-800 мс) | $$$ (по трафику) | Booking, Expedia, Airbnb — сайты с жёсткой защитой |
| Мобильные прокси | Максимальный (IP мобильных операторов) | Низкая (500-1500 мс) | $$$$ (самые дорогие) | Парсинг мобильных версий, API-запросы, обход Cloudflare |
| Прокси дата-центров | Низкий (легко детектируются) | Очень высокая (50-150 мс) | $ (самые дешёвые) | Aviasales API, менее защищённые агрегаторы, тестирование |
Особенности выбора для конкретных travel-сайтов
Aviasales и Skyscanner — относительно лояльны к парсингу через API (если у вас есть партнёрский доступ). Для веб-парсинга достаточно резидентных прокси с ротацией каждые 5-10 запросов. Датацентр-прокси работают, но требуют большого пула IP (минимум 500 адресов) и медленной ротации (не чаще 1 запроса в 30 секунд с одного IP).
Booking.com и Expedia — используют Cloudflare Enterprise с жёсткими правилами. Датацентр-прокси блокируются в 90% случаев даже при медленном парсинге. Нужны только резидентные или мобильные прокси, плюс эмуляция реального браузера (Selenium Stealth, Puppeteer Extra с плагинами). Ротация IP — после каждых 3-5 запросов.
Airbnb — один из самых защищённых сайтов. Требует резидентные прокси с геолокацией, совпадающей с поисковым запросом (если ищете отели в Париже — IP должен быть французский). Обязательны cookies, реферер, заголовки браузера. Мобильные прокси показывают лучшие результаты для парсинга через мобильное API.
Kayak и Momondo — средний уровень защиты. Резидентные прокси — оптимальный выбор. Можно использовать датацентр-прокси, но с обязательной ротацией и задержками между запросами (минимум 10-15 секунд).
Резидентные vs датацентр-прокси: что выбрать для travel-сайтов
Главное отличие резидентных прокси от датацентр-прокси — источник IP-адреса. Резидентные используют IP реальных домашних интернет-провайдеров (Ростелеком, МТС, Comcast, Verizon), датацентр-прокси — IP серверов хостинг-компаний (AWS, Google Cloud, OVH). Travel-сайты доверяют резидентным IP, потому что их используют обычные пользователи.
Когда резидентные прокси обязательны
1. Парсинг сайтов с Cloudflare/Akamai. Booking, Expedia, Airbnb используют эти системы — они автоматически блокируют 95% IP дата-центров. Резидентные прокси проходят проверку, потому что их IP не числятся в базах прокси-провайдеров.
2. Сбор цен с привязкой к геолокации. Travel-сайты показывают разные цены пользователям из разных стран и городов (из-за налогов, курсов валют, локальных акций). Если вам нужны цены для конкретного региона (например, цены для жителей Германии), резидентные прокси с немецкими IP — единственный надёжный вариант.
3. Долгосрочный парсинг без блокировок. Если вы мониторите цены 24/7 месяцами, резидентные прокси окупаются — вы не тратите время на замену заблокированных IP и настройку новых прокси.
Когда можно использовать датацентр-прокси
1. Парсинг через официальные API. Если у вас есть партнёрский доступ к Aviasales API, Skyscanner API — тип прокси не критичен, API менее чувствительны к источнику IP. Датацентр-прокси дадут высокую скорость и низкую стоимость.
2. Тестирование и разработка парсера. На этапе написания и отладки кода используйте датацентр-прокси — они дешевле, быстрее, и не жалко, если несколько IP попадут в бан.
3. Парсинг менее защищённых агрегаторов. Некоторые региональные travel-сайты или агрегаторы автобусных билетов не используют продвинутую антибот-защиту. Для них датацентр-прокси с большим пулом 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 (какие использованы, какие заблокированы).
Рекомендуемая частота ротации для travel-сайтов
| Сайт | Тип прокси | Частота ротации | Макс. запросов с 1 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-адреса
Travel-сайты показывают разные цены в зависимости от геолокации пользователя. Это не баг, а бизнес-модель: авиакомпании и отели устанавливают разные тарифы для разных рынков. Например, билет Москва-Нью-Йорк может стоить $600 для пользователя из России и $750 для пользователя из США (из-за налогов, конкуренции, покупательской способности).
Как сайты определяют геолокацию
1. По IP-адресу. Основной метод. Сайты используют базы GeoIP (MaxMind, IP2Location), которые сопоставляют IP с городом, регионом, страной. Точность определения города — 70-90%, страны — 95-99%.
2. По языку браузера и часовому поясу. Если IP показывает Германию, а язык браузера — русский, а часовой пояс — UTC+3 (Москва) — это признак прокси. Сайт может показать капчу или заблокировать запрос.
3. По валюте и настройкам аккаунта. Если вы залогинены в аккаунт Booking, сайт запомнил вашу страну при регистрации. Смена IP на другую страну вызовет подозрения — Booking может попросить подтвердить личность или заблокировать аккаунт.
Как правильно выбирать геолокацию прокси
Для сбора цен конкретного рынка: Используйте IP той страны, цены которой вас интересуют. Если вы мониторите цены для российского рынка — берите российские резидентные прокси. Для европейского рынка — прокси из стран ЕС (Германия, Франция, Польша). Для США — американские прокси.
Для обхода геоблокировок: Некоторые travel-сайты или специальные предложения доступны только из определённых стран. Например, внутренние рейсы США часто дешевле при бронировании с американского IP. Используйте прокси нужной страны + настройте язык браузера и часовой пояс под эту страну.
Для парсинга глобальных данных: Если вам нужны цены для всех рынков (например, для аналитики), используйте пул прокси из разных стран. Ротируйте геолокацию вместе с IP: запрос с немецкого IP → немецкие цены, запрос с французского IP → французские цены.
Ошибка: Использовать IP одной страны, но искать отели/билеты в другой стране с несовпадающей валютой. Например, IP из России, поиск отелей в Таиланде, валюта — евро. Это выглядит подозрительно. Либо используйте IP страны назначения, либо IP вашей реальной страны с её валютой.
Настройка прокси для популярных парсеров и скриптов
Рассмотрим настройку прокси для самых популярных инструментов парсинга travel-сайтов. Примеры приведены для резидентных прокси с ротацией, но подходят и для других типов.
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. Если нужна sticky session (один IP на несколько запросов), добавьте session ID в username: 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 property
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) — фреймворк для масштабного парсинга. Поддерживает прокси через middleware. Пример настройки в 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) — современный фреймворк с встроенной ротацией прокси, обходом антибот-систем, автоматическими retry. Отлично подходит для travel-сайтов.
Обход антибот-систем Cloudflare, PerimeterX, Akamai
Даже с качественными резидентными прокси вы можете столкнуться с блокировками, если не обходите антибот-системы правильно. Booking использует Cloudflare, Airbnb — PerimeterX, некоторые сайты — Akamai Bot Manager. Эти системы анализируют не только IP, но и поведение, fingerprint браузера, TLS-рукопожатие.
Cloudflare: основные методы обхода
1. Используйте браузерную автоматизацию. Cloudflare проверяет JavaScript-challenge, который выполняется в браузере. Простые HTTP-запросы (requests, curl) не пройдут проверку. Нужен Puppeteer, Playwright или Selenium с правильными настройками.
2. Скрывайте признаки автоматизации. Установите puppeteer-extra-plugin-stealth (Node.js) или undetected-chromedriver (Python). Эти библиотеки патчат браузер, убирая свойства navigator.webdriver, window.chrome, изменяя permissions API.
3. Правильный TLS fingerprint. Cloudflare анализирует TLS-рукопожатие. Используйте библиотеки, эмулирующие TLS браузеров: curl-impersonate (эмулирует Chrome/Firefox TLS), tls-client (Go), hrequests (Python).
4. Решайте капчу автоматически. Если Cloudflare показывает капчу (Turnstile), используйте сервисы решения капчи: 2Captcha, Anti-Captcha, CapSolver. Они интегрируются через API и стоят $1-3 за 1000 решений.
PerimeterX (Airbnb, некоторые travel-сайты)
PerimeterX — одна из самых сложных антибот-систем. Она анализирует поведение пользователя (движения мыши, клики, скроллинг), создаёт fingerprint устройства, проверяет cookies и localStorage.
Методы обхода:
1. Эмулируйте поведение пользователя. Добавьте случайные паузы между действиями (2-5 секунд), двигайте мышь, скроллите страницу. В Puppeteer используйте библиотеку ghost-cursor для реалистичных движений мыши.
2. Сохраняйте cookies и localStorage. PerimeterX генерирует токены, которые хранятся в cookies (_px3, _pxhd) и localStorage. Если вы меняете IP, но сохраняете cookies — это подозрительно. Либо меняйте IP + очищайте cookies, либо используйте sticky sessions (один IP = одна сессия с cookies).
3. Используйте мобильные прокси. PerimeterX строже к датацентр-IP. Мобильные прокси показывают лучшие результаты для обхода PerimeterX.
Akamai Bot Manager
Akamai анализирует сенсорные данные (акселерометр, гироскоп на мобильных), WebGL fingerprint, аудио-контекст, производительность устройства. Обход требует продвинутой эмуляции браузера.
Рекомендации: Используйте реальные браузеры (не headless), мобильные прокси, добавляйте случайные задержки, эмулируйте сенсорные события (touch events). Для сложных случаев — используйте браузерные фермы (BrowserStack, LambdaTest) или антидетект-браузеры (AdsPower, Multilogin).
Типичные ошибки при парсинге travel-сайтов через прокси
Даже опытные разработчики допускают ошибки, которые приводят к блокировкам. Вот самые частые проблемы и их решения.
Ошибка 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)). Для travel-сайтов оптимально: 2-5 секунд между запросами с одного IP, 0.5-2 секунды между запросами с разных IP.
Ошибка 3: Игнорирование cookies и сессий
Travel-сайты используют cookies для отслеживания сессий, хранения токенов антибот-систем, персонализации цен. Если вы делаете каждый запрос без cookies (как новый пользователь), это подозрительно.
Решение: Используйте requests.Session() (Python) или сохраняйте cookies между запросами в Puppeteer. Для sticky sessions (один IP = несколько запросов) обязательно сохраняйте cookies.
Ошибка 4: Несоответствие геолокации IP и параметров браузера
IP из Германии, но язык браузера — русский, часовой пояс — UTC+3, валюта — рубли. Антибот-системы видят это несоответствие и блокируют запрос.
Решение: Синхронизируйте параметры браузера с геолокацией прокси. Если используете немецкий IP — установите немецкий язык (Accept-Language: de-DE), часовой пояс Europe/Berlin, валюту EUR.
Ошибка 5: Использование бесплатных или низкокачественных прокси
Бесплатные прокси и дешёвые публичные прокси уже заблокированы на всех крупных travel-сайтах. Их IP числятся в чёрных списках, имеют плохую репутацию (использовались для спама, DDoS).
Решение: Используйте качественные резидентные или мобильные прокси от проверенных провайдеров. Проверяйте репутацию IP через сервисы IPQualityScore, Scamalytics перед использованием.
Чек-лист перед запуском парсера:
✅ Прокси — резидентные или мобильные, с нужной геолокацией
✅ User-Agent — реальный браузер, ротируется
✅ Cookies — сохраняются в рамках сессии
✅ Задержки — 2-5 секунд между запросами
✅ Ротация IP — после 3-10 запросов (зависит от сайта)