航空券サイトは、インターネット上で最も攻撃的に保護されたリソースの一つです。古い価格、キャプチャ、IPの瞬時ブロック — これらすべてが料金データの収集を本当に困難にしています。アグリゲーターを構築している場合、顧客のために価格を監視している場合、または自動的に安いルートを探している場合、適切に設定されたプロキシなしでは1時間も持ちません。この記事では、どのプロキシが機能するのか、どのように設定するのか、なぜあるタイプが他のタイプよりも失敗するのかを詳しく見ていきます。
なぜ航空券サイトはスクレイピングをすぐにブロックするのか
航空業界はダイナミックプライシングで運営されています:料金は需要、時間帯、ブラウザの履歴、さらにはユーザーのジオロケーションに応じて1日に何度も変わります。だからこそ、大手アグリゲーター(Aviasales、Skyscanner、Kayak、Google Flights)は、自動リクエストからの保護に巨額のリソースを投入しています。
プロキシなし、または安価なデータセンターのIPでデータを収集しようとすると、次のようなことが起こります:
- IPの瞬時ブロック — ほとんどの航空券サイトはデータセンターのASN(自律システム)データベースを管理しています。ホスティングのIPからのリクエストは、ページが読み込まれる前にブロックされます。
- キャプチャとCloudflare — 最初のリクエストが通過しても、1つのアドレスから5〜10回のリクエストの後にキャプチャや確認へのリダイレクトが表示されます。
- 偽の価格 — 一部のサイト(特にOTAアグリゲーター)は、競合他社のデータを損なうために、ボットに対して高すぎるまたは古い料金を意図的に表示します。
- フィンガープリンティング — IPに加えて、システムはHTTPヘッダー、TLS拡張の順序、マウスの動き、スクロール速度を分析します。
- レート制限 — 一定時間内に1つのIPからのリクエスト数を制限します。通常の閾値は1分あたり20〜50リクエストで、それを超えると接続が切断されます。
結論:質の高いプロキシと実際のIPがなければ、最新のデータを収集することはできません。データセンターのプロキシはここでは機能しません — 航空券サイトは数秒でそれらを認識します。必要なのはレジデンシャルまたはモバイルIPです。
航空券に適したプロキシの種類
3つの主要なプロキシの種類と航空券の価格収集に対する適用性を見ていきましょう:
| プロキシの種類 | IPのソース | 航空券サイトの保護を回避する方法 | 速度 | コスト |
|---|---|---|---|---|
| レジデンシャルプロキシ | 家庭のプロバイダー(Ростелеком、ビライン、AT&T) | ⭐⭐⭐⭐⭐ 優れた | 中程度 | 中程度 |
| モバイルプロキシ | キャリアネットワーク(MTS、メガフォン、T-Mobile) | ⭐⭐⭐⭐⭐ 優れた | 高い | 高い |
| データセンターのプロキシ | サーバーファーム(AWS、OVH、Hetzner) | ⭐⭐ 悪い | 非常に高い | 低い |
結論は明らかです:航空券サイトに対してデータセンターのプロキシはほとんど無意味です。Aviasales、Skyscanner、Google Flightsは、ホスティングプロバイダーのASNからのIPを瞬時に認識し、ブロックするか、キャプチャを表示します。実際の選択はレジデンシャルとモバイルプロキシの間であり、それぞれに独自のニッチがあります。
レジデンシャルプロキシ vs モバイルプロキシ:どちらを選ぶべきか
両方のタイプが機能しますが、異なるシナリオでは一方が他方に勝ります。具体的に見ていきましょう。
レジデンシャルプロキシ — 大規模なデータ収集用
レジデンシャルプロキシは、世界中の実際の家庭ユーザーのIPアドレスを使用します。航空券のスクレイピングにおいては、次のような意味があります:
- 特定の国や都市を選択できる — これは、異なる市場の価格を確認する場合に重要です(例:モスクワからの価格 vs ロンドンからの同じフライトの価格)。
- 大規模なIPプール — 数千のアドレスがローテーションに使用でき、リクエストの繰り返しを避けることができます。
- 大量のトラフィックに対して良好なコストパフォーマンス。
- セッションとローテーションモードのサポート — 実際のユーザーを模倣するために1つのセッションを維持できます。
理想的なシナリオ:アグリゲーターやモニタリングサービスを構築しており、10〜20のサイトから同時に価格を収集し、1時間に何千ものリクエストを行う必要があります。ローテーション付きのレジデンシャルプロキシがあなたの選択です。
モバイルプロキシ — 最も保護されたサイト用
モバイルプロキシは、実際の携帯電話キャリアのSIMカードを介して機能します。その特徴は、航空券サイトがほとんどブロックしないモバイルネットワーク(3G/4G/5G)からのIPアドレスです。理由は簡単です:1つのモバイルIPの背後には、何千もの実際のユーザーがいるNATネットワークが存在する可能性があります。そのようなアドレスをブロックすることは、何千人もの生の顧客を失うことを意味します。
- アンチボットシステムからの信頼度が最大。
- 攻撃的なスクレイピングでもブロックされるリスクがほぼゼロ。
- セッションの変更を通じてIPを変更できる(デバイスを物理的に変更することなく)。
- コストが高い — 重要なデータや複雑なサイトに対しては正当化されます。
理想的なシナリオ:特定の複雑なサイト(例:Cloudflare Enterpriseを使用している航空会社の公式サイト)からデータを収集する必要があり、レジデンシャルプロキシが時折キャプチャを表示する場合。モバイルプロキシがこの問題を解決します。
💡 実用的なアドバイス
航空券の価格監視に関するほとんどのタスクに対して最適な戦略は、大量収集用のレジデンシャルプロキシ + 複雑なサイト用のモバイルプロキシです。これにより、データの質を損なうことなく予算を最適化できます。
Aviasales、Skyscanner、Google Flights、Kayakの保護の特徴
各プラットフォームには独自の保護機能があります。これらの違いを理解することで、プロキシとリクエストの動作を適切に設定できます。
Aviasales
ロシアのアグリゲーターは、レート制限と動作分析の組み合わせを使用しています。制限は、1つのIPからのリクエストが約30〜40リクエスト/分です。これを超えると、Yandex SmartCaptchaからのキャプチャにリダイレクトされます。サイトはロシアのIPを持つレジデンシャルプロキシに対して比較的寛容です。重要な点:Aviasalesの価格はジオロケーションに依存するため、正確なデータ収集のためには、必要な料金の国のIPを持つプロキシを使用してください。
Skyscanner
最も保護されたアグリゲーターの一つです。疑わしいIPに対して「Under Attack Mode」を設定したCloudflareと独自のアンチボットシステムを使用しています。データセンターのプロキシはここではまったく機能しません。レジデンシャルプロキシは通過しますが、リクエストのペースを遅くする必要があります(1分あたり15〜20リクエスト以下)と、正しいブラウザのヘッダーが必要です。Skyscannerでは、プロキシを接続したPlaywrightまたはPuppeteerを介して実際のブラウザセッションを模倣することが推奨されます。
Google Flights
Googleは独自のボット検出アルゴリズム(reCAPTCHA v3と行動パターンの分析)を使用しています。ここではHTMLの直接スクレイピングは機能しません。データはJavaScriptを介して読み込まれます。レジデンシャルまたはモバイルプロキシを使用したヘッドレスブラウザ(Playwright/Puppeteer)が必要です。Googleは、IPのジオロケーションと言語の一致にも敏感です — 不一致はブロックのリスクを高めます。
Kayak
アメリカのアグリゲーターで、PerimeterX(現在はHUMAN Security)に基づく攻撃的なボット保護があります。IPだけでなく、TLSフィンガープリンティング、HTTP/2ヘッダーの順序、リクエスト間の時間を認識します。Kayakには、レジデンシャルまたはモバイルプロキシ、実際のブラウザの模倣、リクエスト間のランダムな遅延(2〜8秒)が必須です。
| プラットフォーム | 保護システム | データセンターは機能しますか? | ヘッドレスが必要ですか? | 推奨プロキシタイプ |
|---|---|---|---|---|
| Aviasales | レート制限 + Yandexキャプチャ | ❌ いいえ | 望ましい | レジデンシャル(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)にはヘッドレスブラウザが必要です。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:1つのIP — 1つのセッション
複数の並行リクエストに1つのIPを使用しないでください。アンチボットシステムは、1つのアドレスからの異常に高い負荷を検出し、それをブロックします。各リクエストのストリームは、別のプロキシを介して動作する必要があります。
ルール2:リクエスト間のランダムな遅延
実際のユーザーは、等間隔でリクエストを行いません。リクエスト間に2〜8秒のランダムな遅延を追加します。これにより、均等なリクエストと比較してボットに発見される可能性が3〜4倍低下します。
ルール3:ジオロケーションと言語の一致
ドイツのIPを使用している場合、ブラウザのヘッダーにはドイツ語が含まれている必要があります(Accept-Language: de-DE)。不一致はアンチボットシステムへの明白な信号です。これは特にGoogle Flightsにとって重要です。
ルール4:多段リクエスト用のセッションプロキシ
一部の航空券サイトでは、複数のステップが必要です:検索 → フライトの選択 → 詳細の表示。これらすべてのステップは1つのIPから実行する必要があります。スティッキーセッション(固定セッション)を使用します — これは、1つのIPが特定の時間(通常は10〜30分)あなたのストリームに固定されるモードです。
ルール5:プロキシの品質監視
プール内のどのIPがブロックされているかを定期的に確認します。403、429のコードを返すアドレスを自動的に除外します。ほとんどのプロフェッショナルなスクレイピングフレームワーク(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を自動的にローテーションし、ブロックされたアドレスを除外します。高負荷のタスクに適しており、1日に数十万のリクエストを処理できます。
ParseHub
JavaScriptレンダリングをサポートする別のノーコードツール。Aviasalesに対してうまく機能します。プロキシはSettings → Advanced → Proxyセクションで接続します。
⚠️ 価格のジオターゲティングに関する重要な情報
航空券サイトは、ユーザーの国に応じて異なる価格を表示します。これは単なるマーケティング戦略ではなく、技術的な現実です。ロシア市場の価格を監視する場合は、ロシアのIPを持つプロキシを使用してください。市場間の価格を比較するためには(例:ドイツのユーザーに対する同じフライトの価格)、該当国のIPを持つプロキシが必要です。
価格収集時にバンを避けるためのチェックリスト
このリストを保存してください — スクレイピングの設定時にほとんどの問題を避けるのに役立ちます:
✅ スクレイパーを起動する前に
- レジデンシャルまたはモバイルプロキシが選択されている(データセンターではない)
- プロキシのIPがターゲット市場に一致している(国/都市)
- ブラウザの言語がプロキシのジオロケーションと一致している
- IPのローテーションが設定されている(ストリームごとに最低1つのIP)
- User-Agentのヘッダーが実際のブラウザを模倣している
- JSサイトにはヘッドレスブラウザ(Playwright/Puppeteer)が使用されている
✅ スクレイパーが動作している間
- リクエスト間の遅延:2〜8秒(ランダム)
- 1つのIPからのリクエストは20〜30リクエスト/分を超えない
- 多段セッションは1つのIPを使用する(スティッキーセッション)
- 403/429コードは自動的にIPをプールから除外する
- 分析のためにすべてのエラーをログに記録する
✅ 複雑なサイト用の追加事項
- 正しいRefererおよびAcceptヘッダー
- マウスの動きやスクロールの模倣(Playwright用)
- 実際のブラウザのプールからのUser-Agentのランダムな変更
- 再訪問を模倣するためのクッキーセッションの使用
バンを引き起こす一般的なエラー
- 無料のプロキシの使用。それらのIPはすでにすべての主要な航空券サイトのブラックリストに載っています。最初のリクエストでブロックされます。
- リクエストの頻度が高すぎる。良好なプロキシを使用していても、1つのIPからの100リクエスト/分はバンへの確実な道です。
- すべてのリクエストに同じUser-Agent。実際のユーザーは異なるブラウザとバージョンを使用します — あなたのスクレイパーはこれを模倣する必要があります。
- クッキーの無視。多くのサイトはクッキーを介してセッションを追跡します。リクエスト間でクッキーを保存および送信しないと、動作が異常に見えます。
- ジオロケーションとリクエストの内容の不一致。アメリカのIPを介してロシア語版のサイトをリクエストすることは、アンチボットシステムへの赤信号です。
結論
航空券の価格データ収集は、スクレイピングにおいて最も技術的に難しいタスクの一つです。航空券サイトはボットからの保護に多大なリソースを投入しており、正しいツールなしではそれを回避することは不可能です。この記事からの主な結論は次のとおりです:
- データセンターのプロキシは航空券サイトには機能しません — それらは瞬時にブロックされます。
- レジデンシャルプロキシは、さまざまな市場からの価格を大規模に監視するための最適な選択です。
- モバイルプロキシは、最も保護されたプラットフォーム(Kayak、Skyscanner)や重要なデータに必要です。
- IPのローテーション、ランダムな遅延、実際のブラウザの模倣は、安定した動作のための必須条件です。
- プロキシのジオロケーションはターゲット市場と一致する必要があります。そうでないと、価格が不正確になります。
航空券の価格監視システムを構築する予定がある場合や、アグリゲーターのためにデータを収集する場合は、レジデンシャルプロキシから始めてください — それらは保護を回避するための質、地理的カバレッジ、コストのバランスを提供します。攻撃的なアンチボット保護を持つ最も複雑なサイトには、モバイルプロキシを検討してください — それらはアンチボットシステムからの最大の信頼レベルを提供し、適切に設定すればブロックをほぼ排除します。