항공권 사이트는 인터넷에서 가장 공격적으로 보호되는 자원 중 하나입니다. 오래된 가격, CAPTCHA, 즉각적인 IP 차단 — 이러한 모든 요소가 요금 데이터 수집을 진정한 시험으로 만듭니다. 만약 당신이 집계기를 구축하거나 고객을 위해 가격을 모니터링하거나 자동으로 저렴한 경로를 찾고 있다면, 제대로 설정된 프록시 없이는 한 시간도 버티기 어렵습니다. 이 기사에서는 어떤 프록시가 작동하는지, 어떻게 설정하는지, 그리고 왜 어떤 유형은 다른 유형보다 더 잘 작동하는지 살펴보겠습니다.
항공 사이트가 스크래핑을 그렇게 빨리 차단하는 이유
항공 산업은 동적 가격 책정을 사용합니다: 요금은 수요, 시간대, 브라우저 기록 및 사용자 지리적 위치에 따라 하루에 수십 번 변경됩니다. 이러한 이유로 대형 집계기인 Aviasales, Skyscanner, Kayak, Google Flights는 자동 요청에 대한 보호를 위해 막대한 자원을 투자합니다.
프록시 없이 또는 저렴한 데이터 센터 IP로 데이터를 수집하려고 할 때 발생하는 일은 다음과 같습니다:
- 즉각적인 IP 차단 — 대부분의 항공 사이트는 데이터 센터의 ASN(자율 시스템) 데이터베이스를 유지합니다. 호스팅 IP에서의 요청은 페이지가 로드되기 전에 차단됩니다.
- CAPTCHA 및 Cloudflare — 첫 번째 요청이 통과하더라도, 한 주소에서 5-10회 요청 후에는 CAPTCHA 또는 확인을 위한 리디렉션이 나타납니다.
- 가짜 가격 — 일부 사이트(특히 OTA 집계기)는 경쟁자에게 데이터를 손상시키기 위해 봇에게 인위적으로 높은 가격이나 오래된 요금을 표시합니다.
- 지문 인식 — IP 외에도 시스템은 HTTP 헤더, TLS 확장 순서, 마우스 행동 및 스크롤 속도를 분석합니다.
- 요청 제한 — 일정 시간 내에 하나의 IP에서 요청 수를 제한합니다. 일반적으로 한계는 분당 20-50 요청이며, 그 이후에는 연결이 끊깁니다.
결론: 품질 좋은 프록시와 실제 IP 없이는 актуальные 데이터를 수집할 수 없습니다. 데이터 센터 프록시는 여기서 잘 작동하지 않습니다 — 항공 사이트는 몇 초 만에 이를 인식합니다. 주거용 또는 모바일 IP가 필요합니다.
항공권에 적합한 프록시 유형
항공권 가격 수집 작업에 적합한 세 가지 주요 프록시 유형을 살펴보겠습니다:
| 프록시 유형 | IP 출처 | 항공 사이트 보호 우회 | 속도 | 비용 |
|---|---|---|---|---|
| 주거용 프록시 | 가정용 제공업체 (Ростелеком, Билайн, AT&T) | ⭐⭐⭐⭐⭐ 훌륭함 | 중간 | 중간 |
| 모바일 프록시 | 이동통신사 네트워크 (MTS, Мегафон, T-Mobile) | ⭐⭐⭐⭐⭐ 훌륭함 | 높음 | 높음 |
| 데이터 센터 프록시 | 서버 농장 (AWS, OVH, Hetzner) | ⭐⭐ 나쁨 | 매우 높음 | 낮음 |
결론은 분명합니다: 항공 사이트에 대해 데이터 센터 프록시는 거의 쓸모가 없습니다. Aviasales, Skyscanner 및 Google Flights는 호스팅 제공업체의 ASN에서 IP를 즉시 인식하고 차단하거나 CAPTCHA를 표시합니다. 실제 선택은 주거용 프록시와 모바일 프록시 간의 차이입니다 — 각기 다른 용도가 있습니다.
주거용 vs 모바일 프록시: 항공권에 무엇을 선택할까
두 유형 모두 작동하지만, 특정 시나리오에서는 하나가 다른 것보다 더 유리합니다. 구체적으로 살펴보겠습니다.
주거용 프록시 — 대규모 데이터 수집을 위한
주거용 프록시는 전 세계의 실제 가정 사용자 IP 주소를 사용합니다. 항공권 스크래핑의 경우 이는 다음을 의미합니다:
- 특정 국가 및 도시를 선택할 수 있는 가능성 — 이는 서로 다른 시장(예: 모스크바에서 출발하는 가격 vs 런던에서 출발하는 가격)을 확인할 때 중요합니다.
- 큰 IP 풀 — 수천 개의 주소를 회전할 수 있어 반복 없이 수백 개의 요청을 할 수 있습니다.
- 트래픽이 많은 경우 좋은 가격/품질 비율.
- 세션 및 회전 모드 지원 — 실제 사용자를 모방하기 위해 하나의 세션을 유지할 수 있습니다.
이상적인 시나리오: 당신이 집계기 또는 모니터링 서비스를 구축하고 있으며 동시에 10-20개의 사이트에서 가격을 수집해야 하고, 시간당 수천 개의 요청을 해야 합니다. 회전하는 주거용 프록시가 당신의 선택입니다.
모바일 프록시 — 가장 보호된 사이트를 위한
모바일 프록시는 이동통신사의 실제 SIM 카드를 통해 작동합니다. 이들의 특징은 항공 사이트가 거의 차단하지 않는 모바일 네트워크(3G/4G/5G)의 IP 주소입니다. 이유는 간단합니다: 하나의 모바일 IP 뒤에는 수천 명의 실제 사용자가 있는 NAT 네트워크가 있을 수 있습니다. 이러한 주소를 차단하는 것은 수천 명의 실제 고객을 잃는 것을 의미합니다.
- 안티봇 시스템으로부터의 최대 신뢰 수준.
- 공격적인 스크래핑에도 불구하고 차단 위험이 거의 없음.
- 세션 변경을 통한 IP 변경 가능 (장치 물리적 변경 없이).
- 비용이 더 높지만, 이는 중요한 데이터나 복잡한 사이트에 대해 정당화됩니다.
이상적인 시나리오: 특정 복잡한 사이트(예: Cloudflare Enterprise가 있는 항공사 직접 사이트)에서 데이터를 수집해야 하며, 주거용 프록시가 주기적으로 CAPTCHA를 발생시키는 경우입니다. 모바일 프록시가 이 문제를 해결할 것입니다.
💡 실용적인 조언
대부분의 항공권 가격 모니터링 작업에 최적의 전략은 대량 수집을 위한 주거용 프록시 + 복잡한 사이트를 위한 모바일 프록시입니다. 이는 데이터 품질을 손상시키지 않으면서 예산을 최적화할 수 있게 해줍니다.
Aviasales, Skyscanner, Google Flights 및 Kayak의 보호 특징
각 플랫폼은 고유한 보호 특징을 가지고 있습니다. 이러한 차이를 이해하면 프록시와 요청 행동을 올바르게 설정하는 데 도움이 됩니다.
Aviasales
러시아의 집계기는 속도 제한 및 행동 분석의 조합을 사용합니다. 제한은 한 IP에서 분당 약 30-40 요청입니다. 이를 초과하면 Yandex SmartCaptcha의 CAPTCHA로 리디렉션됩니다. 이 사이트는 러시아 IP를 가진 주거용 프록시에 대해 상대적으로 관대합니다. 중요: Aviasales의 가격은 지리적 위치에 따라 달라지므로, 데이터를 올바르게 수집하려면 필요한 요금의 국가 IP를 가진 프록시를 사용해야 합니다.
Skyscanner
가장 보호된 집계기 중 하나입니다. 의심스러운 IP에 대해 "Under Attack Mode"로 Cloudflare를 사용하며, 자체 안티봇 시스템도 운영합니다. 데이터 센터 프록시는 여기서 전혀 작동하지 않습니다. 주거용 프록시는 통과하지만 요청 속도가 느려야 하며(분당 15-20 이하) 올바른 브라우저 헤더가 필요합니다. Skyscanner에서는 실제 브라우저 세션을 Playwright 또는 Puppeteer를 통해 모방하고 프록시를 연결하는 것이 좋습니다.
Google Flights
Google은 자체 봇 탐지 알고리즘인 reCAPTCHA v3 및 행동 패턴 분석을 사용합니다. 여기서는 HTML 직접 스크래핑이 작동하지 않으며, 데이터는 JavaScript를 통해 로드됩니다. 주거용 또는 모바일 프록시가 있는 headless 브라우저(Playwright/Puppeteer)가 필요합니다. Google은 IP의 지리적 위치와 브라우저 언어의 일치에 민감합니다 — 불일치는 차단 위험을 증가시킵니다.
Kayak
PerimeterX(현재 HUMAN Security)를 기반으로 한 공격적인 봇 보호가 있는 미국의 집계기입니다. IP뿐만 아니라 TLS 지문, HTTP/2 헤더 순서 및 요청 간 시간을 인식합니다. Kayak에서는 주거용 또는 모바일 프록시, 실제 브라우저 모방 및 요청 간의 무작위 지연(2-8초)이 필수입니다.
| 플랫폼 | 보호 시스템 | 데이터 센터 프록시 작동 여부? | 헤드리스 필요? | 추천 프록시 유형 |
|---|---|---|---|---|
| Aviasales | 속도 제한 + Yandex CAPTCHA | ❌ 아니요 | 바람직함 | 주거용 (RU) |
| Skyscanner | Cloudflare + 자체 시스템 | ❌ 아니요 | ✅ 예 | 주거용 / 모바일 |
| Google Flights | reCAPTCHA v3 + 행동 분석 | ❌ 아니요 | ✅ 필수 | 주거용 / 모바일 |
| Kayak | HUMAN Security (PerimeterX) | ❌ 아니요 | ✅ 예 | 모바일 |
가격 데이터 수집을 위한 프록시 설정 방법
설정은 사용하는 도구에 따라 다릅니다. 가장 일반적인 시나리오를 살펴보겠습니다.
옵션 1: 준비된 스크래퍼 및 노코드 도구
코드를 작성하지 않는 경우, 준비된 솔루션인 Octoparse, ParseHub, Apify를 사용하세요. 이들 모두 외부 프록시 연결을 지원합니다. 절차는 다음과 같습니다:
- 프록시 데이터 얻기: 호스트 (IP 또는 도메인), 포트, 로그인, 비밀번호.
- 도구 설정 열기 → "Proxy" 또는 "Network" 섹션.
- 프로토콜 유형 선택: HTTPS (대부분의 작업에 적합) 또는 SOCKS5 (더 낮은 수준의 작업이 필요한 경우).
- 연결 데이터를 삽입합니다. 형식은 일반적으로 다음과 같습니다:
login:password@host:port - 프록시 회전 활성화 — 대부분의 도구는 주소 풀을 사용할 경우 이를 자동으로 수행합니다.
- 대상 사이트에 대한 테스트 요청을 실행하고 IP가 변경되었는지 확인합니다.
옵션 2: Playwright / Puppeteer와 프록시
복잡한 사이트(예: Google Flights, Skyscanner)에는 headless 브라우저가 필요합니다. Playwright에서 프록시를 연결하는 방법은 다음과 같습니다:
const { chromium } = require('playwright');
const browser = await chromium.launch({
proxy: {
server: 'http://your-proxy-host:port',
username: 'your_login',
password: 'your_password'
}
});
const page = await browser.newPage();
await page.goto('https://www.skyscanner.com/...');
// 이후 데이터 추출 로직
await browser.close();
각 새로운 요청 시 프록시를 회전하려면 새로운 브라우저 컨텍스트를 생성하고 풀에서 새로운 프록시를 사용하세요. 이는 다양한 사용자 행동을 모방합니다.
옵션 3: Python + requests/httpx
JavaScript 렌더링이 없는 사이트(또는 항공 사이트 API 작업)에 적합한 Python 코드입니다:
import requests
import random
proxies_pool = [
"http://login:[email protected]:port",
"http://login:[email protected]:port",
"http://login:[email protected]:port",
]
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "ru-RU,ru;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}
proxy = {"http": random.choice(proxies_pool), "https": random.choice(proxies_pool)}
response = requests.get(
"https://www.aviasales.ru/search/...",
proxies=proxy,
headers=headers,
timeout=15
)
print(response.status_code)
IP 회전 및 세션 관리: 주요 규칙
올바른 IP 회전은 항공권 스크래핑의 성공의 절반입니다. 단순히 IP를 변경하는 것만으로는 충분하지 않습니다: 스마트하게 변경해야 합니다.
규칙 1: 하나의 IP — 하나의 세션
여러 개의 병렬 요청에 하나의 IP를 사용하지 마세요. 안티봇 시스템은 하나의 주소에서 비정상적으로 높은 부하를 감지하고 차단합니다. 각 요청 흐름은 별도의 프록시를 통해 작동해야 합니다.
규칙 2: 요청 간 무작위 지연
실제 사용자는 일정한 간격으로 요청을 하지 않습니다. 요청 간에 2-8초의 무작위 지연을 추가하세요. 이는 균일한 요청에 비해 봇에 의해 발견될 확률을 3-4배 줄입니다.
규칙 3: 지리적 위치와 언어 일치
독일 IP를 사용하는 프록시를 사용한다면 브라우저 헤더에 독일어가 있어야 합니다 (Accept-Language: de-DE). 불일치는 안티봇 시스템에 대한 명백한 신호입니다. 이는 Google Flights에 특히 중요합니다.
규칙 4: 다단계 요청을 위한 세션 프록시
일부 항공 사이트는 여러 단계를 요구합니다: 검색 → 항공편 선택 → 세부 정보 보기. 모든 단계는 하나의 IP에서 수행되어야 합니다. 스티키 세션(sticky session)을 사용하세요 — 이 모드는 하나의 IP가 특정 시간(일반적으로 10-30분) 동안 요청 흐름에 고정됩니다.
규칙 5: 프록시 품질 모니터링
정기적으로 풀에서 차단된 IP를 확인하세요. 403, 429 코드를 반환하거나 CAPTCHA로 리디렉션되는 주소는 자동으로 제외하세요. 대부분의 전문 스크래핑 프레임워크(Scrapy, Apify)는 이를 자동으로 수행합니다.
항공권 가격 스크래핑을 위한 준비된 도구
처음부터 스크래퍼를 작성하고 싶지 않다면, 프록시와 함께 작동하며 항공 가격 모니터링에 적합한 도구는 다음과 같습니다:
Apify
웹 스크래핑을 위한 클라우드 플랫폼입니다. Skyscanner 및 Google Flights를 위한 준비된 액터(봇)를 가지고 있습니다. 설정을 통해 외부 프록시 연결을 지원합니다. 프록시를 연결하려면: 액터 설정으로 이동 → "Proxy and browser configuration" 탭 → "Custom proxies" 선택 → 프록시 URL을 http://user:pass@host:port 형식으로 삽입합니다.
Octoparse
비주얼 인터페이스를 가진 노코드 스크래퍼입니다. 코드를 작성하지 않는 사람에게 적합합니다. 프록시 회전을 지원합니다: Settings → Cloud Extraction → Proxy Settings → Add Custom Proxy. 프록시 목록을 추가할 수 있으며, Octoparse는 이를 자동으로 교대합니다.
Scrapy + Scrapy-Rotating-Proxies
전문 스크래핑을 위한 Python 프레임워크입니다. scrapy-rotating-proxies 플러그인은 목록에서 IP를 자동으로 회전하고 차단된 주소를 제외합니다. 고부하 작업에 적합하며, 하루에 수십만 개의 요청을 처리할 수 있습니다.
ParseHub
JavaScript 렌더링을 지원하는 또 다른 노코드 도구입니다. Aviasales에서 잘 작동합니다. 프록시는 Settings → Advanced → Proxy 섹션에서 연결됩니다.
⚠️ 가격의 지리적 타겟팅에 대한 중요성
항공 사이트는 사용자 국가에 따라 다른 가격을 표시합니다. 이는 단순한 마케팅 전략이 아니라 기술적 현실입니다. 러시아 시장의 가격을 모니터링하는 경우 러시아 IP를 가진 프록시를 사용하세요. 시장 간 가격 비교(예: 독일 사용자의 동일한 항공편 가격)를 위해서는 해당 국가의 IP를 가진 프록시가 필요합니다.
가격 수집 시 차단되지 않는 방법 체크리스트
이 목록을 저장하세요 — 스크래핑 설정 시 대부분의 문제를 피하는 데 도움이 됩니다:
✅ 스크래퍼 실행 전
- 주거용 또는 모바일 프록시 선택 (데이터 센터 프록시 아님)
- 프록시의 IP가 대상 시장에 맞는지 확인 (국가/도시)
- 브라우저 언어가 프록시의 지리적 위치와 일치하는지 확인
- IP 회전 설정 (흐름당 최소 1 IP)
- User-Agent 헤더가 실제 브라우저를 모방하는지 확인
- JS 사이트의 경우 headless 브라우저 사용 (Playwright/Puppeteer)
✅ 스크래퍼 작업 중
- 요청 간 지연: 2-8초 (무작위)
- 하나의 IP에서 분당 20-30 요청 초과 금지
- 다단계 세션은 하나의 IP 사용 (스티키 세션)
- 403/429 코드가 발생하면 자동으로 IP 제외
- 모든 오류 로그 기록하여 분석
✅ 복잡한 사이트에 추가적으로
- 올바른 Referer 및 Accept 헤더
- 마우스 움직임 및 스크롤링 모방 (Playwright의 경우)
- 실제 브라우저 풀에서 User-Agent 무작위 변경
- 재방문 모방을 위한 쿠키 세션 사용
차단으로 이어지는 일반적인 실수
- 무료 프록시 사용. 이들의 IP는 모든 주요 항공 사이트의 블랙리스트에 올라 있습니다. 첫 요청에서 차단됩니다.
- 너무 높은 요청 빈도. 좋은 프록시를 사용하더라도, 한 IP에서 분당 100 요청은 차단으로 이어지는 확실한 길입니다.
- 모든 요청에 동일한 User-Agent 사용. 실제 사용자는 다양한 브라우저와 버전을 사용합니다 — 당신의 스크래퍼도 이를 모방해야 합니다.
- 쿠키 무시. 많은 사이트가 쿠키를 통해 세션을 추적합니다. 요청 간 쿠키를 저장하고 전달하지 않으면 행동이 비정상적으로 보입니다.
- 지리적 위치와 요청 내용 불일치. 미국 IP를 통해 러시아어 버전의 사이트를 요청하는 것은 안티봇 시스템에 대한 빨간 신호입니다.
결론
항공권 가격 데이터 수집은 스크래핑에서 가장 기술적으로 복잡한 작업 중 하나입니다. 항공 사이트는 봇에 대한 보호에 상당한 자원을 투자하며, 올바른 도구 없이는 이를 우회할 수 없습니다. 이 기사에서의 주요 결론은 다음과 같습니다:
- 데이터 센터 프록시는 항공 사이트에서 작동하지 않습니다 — 즉시 차단됩니다.
- 주거용 프록시는 다양한 시장에서 가격을 대규모로 모니터링하는 데 최적의 선택입니다.
- 모바일 프록시는 가장 보호된 플랫폼(Kayak, Skyscanner)과 중요한 데이터에 필요합니다.
- IP 회전, 무작위 지연 및 실제 브라우저 모방은 안정적인 작업의 필수 조건입니다.
- 프록시의 지리적 위치는 대상 시장과 일치해야 하며, 그렇지 않으면 가격이 부정확할 수 있습니다.
항공권 가격 모니터링 시스템을 구축하거나 집계기를 위한 데이터를 수집할 계획이라면, 주거용 프록시로 시작하세요 — 이는 보호 우회, 지리적 범위 및 비용 간의 적절한 균형을 제공합니다. 공격적인 안티봇 보호가 있는 가장 복잡한 사이트에 대해서는 모바일 프록시를 고려하세요 — 이는 안티봇 시스템으로부터 최대 신뢰 수준을 제공하며, 올바르게 설정하면 차단을 거의 배제합니다.