Aviasales、Booking、Skyscannerなどの旅行アグリゲーターは、自動データ収集から積極的に保護されています。10〜20件のリクエストの後にIPをブロックし、キャプチャを表示し、ボット用に価格を歪めます。航空券やホテルの価格を監視している場合、適切に設定されたプロキシがなければ、パーサーが数分で禁止される可能性があります。
このガイドでは、旅行サイトの安定したパースに必要なプロキシの種類、IPのローテーションの設定方法、CloudflareやAkamaiのアンチボットシステムを回避する方法、プロキシを使用してもブロックされる原因となるエラーについて説明します。
なぜ旅行アグリゲーターはパースをブロックするのか、そしてその方法
旅行アグリゲーターはパースによって実際の損失を被っています。彼らのAPIへのリクエストはコストがかかり(データへのアクセスのために航空会社やホテルに支払っています)、競合他社は収集した価格を利用して顧客を引き寄せます。したがって、Aviasales、Booking、Skyscanner、Kayakはアンチボット保護に数百万ドルを投資しています。
パース検出の主な方法
1. 一つのIPからのリクエスト頻度の分析。 通常のユーザーはセッション中に3〜5回の検索リクエストを行いますが、パーサーは1分間に数百回のリクエストを行います。もしあなたのIPから1分間に15〜20件以上のリクエストがあれば、システムはそれを疑わしいものとしてマークします。50〜100件のリクエストの後には、24時間または永久にブロックされます。
2. ブラウザのフィンガープリンティング。 旅行サイトは画面の解像度、タイムゾーン、インストールされたフォント、WebGLフィンガープリント、キャンバスフィンガープリント、オーディオコンテキストなど、数十のパラメータを収集します。これらのパラメータが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ハンドシェイクのパラメータを分析します: サイファースイートの順序、拡張、プロトコルのバージョン。Pythonのrequestsや標準ライブラリのTLSフィンガープリンティングはブラウザとは異なり — これがボットを即座に明らかにします。
実際のケース: 私たちのクライアントの一人は、100のデータセンタープロキシ(DigitalOcean)を介してBookingの価格をパースしていました。2時間の作業の後、すべてのIPが永久にブロックされました — Bookingはデータセンターの範囲を検出し、ブラックリストに追加しました。レジデンシャルプロキシへの切り替えで問題が解決されました: 1ヶ月の作業で — ブロックはゼロでした。
価格監視に適したプロキシの種類: 比較
旅行アグリゲーターのパースには、レジデンシャル、モバイル、データセンタープロキシの3種類が使用されます。それぞれのタイプには利点、欠点、使用シナリオがあります。選択はパースのボリューム、予算、匿名性の要件によって異なります。
| プロキシの種類 | サイトの信頼度 | 速度 | コスト(概算) | 最適な用途 |
|---|---|---|---|---|
| レジデンシャルプロキシ | 非常に高い(家庭ユーザーのIP) | 中程度(300〜800ms) | $$$(トラフィックに基づく) | Booking、Expedia、Airbnb — 厳しい保護のあるサイト |
| モバイルプロキシ | 最大(モバイルオペレーターのIP) | 低い(500〜1500ms) | $$$$(最も高価) | モバイル版のパース、APIリクエスト、Cloudflareの回避 |
| データセンタープロキシ | 低い(簡単に検出される) | 非常に高い(50〜150ms) | $(最も安価) | Aviasales API、あまり保護されていないアグリゲーター、テスト |
特定の旅行サイトの選択の特徴
AviasalesとSkyscanner — APIを介したパースに対して比較的寛容です(パートナーアクセスがある場合)。ウェブパースには、5〜10リクエストごとにローテーションするレジデンシャルプロキシが十分です。データセンタープロキシも機能しますが、大量のIPプール(最低500アドレス)が必要で、遅いローテーション(1つのIPから30秒ごとに1リクエスト以下)が求められます。
Booking.comとExpedia — 厳しいルールを持つCloudflare Enterpriseを使用しています。データセンタープロキシは、遅いパースでも90%の確率でブロックされます。レジデンシャルまたはモバイルプロキシのみが必要で、リアルブラウザのエミュレーション(Selenium Stealth、Puppeteer Extraとプラグイン)が必要です。IPのローテーションは、3〜5リクエストごとに行うべきです。
Airbnb — 最も保護されたサイトの一つです。検索クエリと一致するジオロケーションのレジデンシャルプロキシが必要です(パリのホテルを検索する場合 — IPはフランスのものでなければなりません)。クッキー、リファラー、ブラウザのヘッダーが必須です。モバイルプロキシは、モバイルAPIを介したパースにおいて最良の結果を示します。
KayakとMomondo — 中程度の保護レベルです。レジデンシャルプロキシが最適な選択です。データセンタープロキシも使用できますが、必ずローテーションとリクエスト間の遅延(最低10〜15秒)を設定してください。
レジデンシャルプロキシ vs データセンタープロキシ: 旅行サイトに最適な選択はどれか
レジデンシャルプロキシとデータセンタープロキシの主な違いは、IPアドレスのソースです。レジデンシャルプロキシは実際の家庭用インターネットプロバイダー(Ростелеком、MTS、Comcast、Verizon)のIPを使用し、データセンタープロキシはホスティング会社(AWS、Google Cloud、OVH)のサーバーのIPを使用します。旅行サイトはレジデンシャルIPを信頼します、なぜならそれは一般のユーザーによって使用されるからです。
レジデンシャルプロキシが必須な場合
1. Cloudflare/Akamaiを使用しているサイトのパース。 Booking、Expedia、Airbnbはこれらのシステムを使用しており、データセンターの95%のIPを自動的にブロックします。レジデンシャルプロキシはチェックを通過します、なぜならそのIPはプロキシプロバイダーのデータベースにリストされていないからです。
2. ジオロケーションに基づく価格収集。 旅行サイトは異なる国や都市のユーザーに異なる価格を表示します(税金、為替レート、ローカルプロモーションのため)。特定の地域の価格が必要な場合(例えば、ドイツの住民向けの価格)、ドイツのIPを持つレジデンシャルプロキシが唯一の信頼できる選択肢です。
3. ブロックなしでの長期的なパース。 24時間365日価格を監視している場合、レジデンシャルプロキシは元が取れます — ブロックされたIPを交換したり、新しいプロキシを設定する時間を無駄にしません。
データセンタープロキシを使用できる場合
1. 公式APIを介したパース。 Aviasales APIやSkyscanner APIにパートナーアクセスがある場合、プロキシの種類は重要ではありません。APIはIPのソースに対してそれほど敏感ではありません。データセンタープロキシは高い速度と低コストを提供します。
2. パーサーのテストと開発。 コードの作成とデバッグの段階ではデータセンタープロキシを使用してください — それらは安価で、速く、いくつかのIPが禁止されても気にしません。
3. あまり保護されていないアグリゲーターのパース。 一部の地域の旅行サイトやバスチケットのアグリゲーターは高度なアンチボット保護を使用していません。それらには、大きなIPプールと遅いローテーションを持つデータセンタープロキシが適しています。
アドバイス: プロキシの種類を組み合わせて使用してください。重要なリクエスト(最初の検索、トークンの取得、キャプチャの回避)にはレジデンシャルプロキシを使用し、APIへの大量リクエストやあまり保護されていないエンドポイントにはデータセンタープロキシを使用してください。これにより、安定性を維持しながらコストを40〜60%削減できます。
IPローテーション戦略: パース時にプロキシをどのくらいの頻度で変更するか
正しいIPのローテーションは、ブロックなしで長期的にパースするための鍵です。IPを頻繁に変更しすぎると、すぐにアドレスプールが枯渇し、トラフィックコストが高くなります。逆に、あまりにも頻度が少ないと、1つのIPに疑わしい活動が蓄積され、禁止される可能性があります。
プロキシのローテーションタイプ
1. リクエストごとのローテーション(ローテーティングプロキシ)。 IPは各リクエストの後または指定されたリクエスト数の後に自動的に変更されます。ほとんどのレジデンシャルプロキシプロバイダーはこのモードを提供しています: 1つのエンドポイントに接続し(例えば、gate.proxycove.com:8000)、IPはプロバイダー側で変更されます。
利点: 設定が簡単で、手動でIPプールを管理する必要がなく、1つのIPがブロックされるリスクが最小限です。
欠点: セッションを制御できない(クッキーやトークンを保持する必要がある場合)、各リクエスト = 新しいIP = 新しいトラフィックコスト。
2. スティッキーセッション(セッショナルプロキシ)。 IPは特定の時間(通常10〜30分)あなたのセッションに固定されます。あなたは1つのIPからいくつかのリクエストを行い、その後自動的に変更されます。プロキシのパラメータを通じて設定されます(例えば、session-id123をログインに追加)。
利点: セッション内でクッキーやトークンを保存でき、トラフィックの消費が少なくなります(1つのIP = いくつかのリクエスト)。
欠点: セッション中にIPが禁止されると、そのセッション内のすべてのリクエストがブロックされます。
3. プールからの手動ローテーション。 あなたはIPアドレスのリスト(例えば、1000個)を取得し、パーサーのコード内でローテーションを管理します: リストからランダムなIPを選択し、Nリクエストを行い、次に切り替えます。これはデータセンタープロキシに典型的です。
利点: ローテーションを完全に制御でき、ブロックされたIPをプールから除外できます。
欠点: コード内にローテーションのロジックを書く必要があり、IPの状態を管理する必要があります(どれが使用されたか、どれがブロックされたか)。
旅行サイトのための推奨ローテーション頻度
| サイト | プロキシの種類 | ローテーション頻度 | 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アドレスの国と都市が重要な理由
旅行サイトはユーザーのジオロケーションに応じて異なる価格を表示します。これはバグではなく、ビジネスモデルです: 航空会社やホテルは異なる市場に対して異なる料金を設定します。例えば、モスクワ-ニューヨークのチケットは、ロシアのユーザーには600ドル、アメリカのユーザーには750ドルかかることがあります(税金、競争、購買力のため)。
サイトはどのようにジオロケーションを特定するか
1. IPアドレスによる。 主な方法です。サイトはGeoIPデータベース(MaxMind、IP2Location)を使用し、IPを都市、地域、国と照合します。都市の特定精度は70〜90%、国は95〜99%です。
2. ブラウザの言語とタイムゾーンによる。 IPがドイツを示し、ブラウザの言語がロシア語、タイムゾーンがUTC+3(モスクワ)である場合 — これはプロキシの兆候です。サイトはキャプチャを表示するか、リクエストをブロックする可能性があります。
3. 通貨とアカウントの設定による。 Bookingアカウントにログインしている場合、サイトは登録時にあなたの国を記憶しています。IPを他の国に変更すると疑念が生じる — Bookingは身元確認を求めるか、アカウントをブロックする可能性があります。
プロキシのジオロケーションを正しく選ぶ方法
特定の市場の価格を収集するためには: あなたが興味のある国のIPを使用してください。ロシア市場の価格を監視している場合 — ロシアのレジデンシャルプロキシを使用してください。ヨーロッパ市場の場合 — EU諸国(ドイツ、フランス、ポーランド)のプロキシを使用してください。アメリカの場合 — アメリカのプロキシを使用してください。
ジオブロックを回避するためには: 一部の旅行サイトや特別オファーは特定の国からのみアクセス可能です。例えば、アメリカの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を取得します。スティッキーセッションが必要な場合(複数のリクエストに対して1つのIP)、ユーザー名にセッション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,
}
# スパイダー内
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.webdriver、window.chromeのプロパティを削除し、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は最も難しいアンチボットシステムの1つです。ユーザーの行動(マウスの動き、クリック、スクロール)を分析し、デバイスのフィンガープリンティングを作成し、クッキーやlocalStorageをチェックします。
回避方法:
1. ユーザーの行動をエミュレートします。 アクション間にランダムな待機時間(2〜5秒)を追加し、マウスを動かし、ページをスクロールします。Puppeteerでは、リアルなマウスの動きのためにghost-cursorライブラリを使用します。
2. クッキーとlocalStorageを保存します。 PerimeterXはトークンを生成し、これらはクッキー(_px3、_pxhd)やlocalStorageに保存されます。IPを変更してもクッキーを保存していると疑わしく見えます。IPを変更する場合はクッキーをクリアするか、スティッキーセッションを使用してください(1つのIP = 1つのセッションでクッキーを保持)。
3. モバイルプロキシを使用します。 PerimeterXはデータセンターのIPに対して厳格です。モバイルプロキシはPerimeterXの回避において最良の結果を示します。
Akamai Bot Manager
Akamaiはセンサーのデータ(モバイルでの加速度計、ジャイロスコープ)、WebGLフィンガープリンティング、オーディオコンテキスト、デバイスのパフォーマンスを分析します。回避には高度なブラウザのエミュレーションが必要です。
推奨事項: 実際のブラウザ(ヘッドレスではない)、モバイルプロキシを使用し、ランダムな遅延を追加し、センサーイベント(タッチイベント)をエミュレートしてください。複雑なケースでは、ブラウザファーム(BrowserStack、LambdaTest)やアンチデテクトブラウザ(AdsPower、Multilogin)を使用してください。
プロキシを介した旅行サイトのパース時の一般的な間違い
経験豊富な開発者でも、ブロックにつながる間違いを犯すことがあります。以下は最も一般的な問題とその解決策です。
エラー1: すべてのリクエストに同じUser-Agentを使用
すべてのリクエストが同じUser-Agent(例えば、標準のPython requests: python-requests/2.28.0)である場合、これは即座にボットを示します。IPを変更しても、サイトは同じUAを見てリクエストを関連付けます。
解決策: 実際のブラウザ(Chrome、Firefox、Safari)のUser-Agentのリストを使用し、それらをローテーションしてください。fake-useragentライブラリ(Python)はランダムなUAを自動的に生成します。
エラー2: リクエストの速度が高すぎる
パーサーが1秒間に100リクエストを行う — これは人間には物理的に不可能です。異なるIPを使用しても、アンチボットシステムはパターンによって異常な活動を検出します(すべてのリクエストが正確に0.01秒ごとに来る)。
解決策: リクエスト間にランダムな遅延を追加します: time.sleep(random.uniform(2, 5))。旅行サイトには、1つのIPからのリクエスト間に2〜5秒、異なるIPからのリクエスト間に0.5〜2秒が最適です。
エラー3: クッキーとセッションを無視する
旅行サイトはクッキーを使用してセッションを追跡し、アンチボットシステムのトークンを保存し、価格をパーソナライズします。すべてのリクエストをクッキーなしで行うと(新しいユーザーとして)、これは疑わしく見えます。
解決策: requests.Session()(Python)を使用するか、Puppeteerでリクエスト間にクッキーを保存します。スティッキーセッション(1つのIP = 複数のリクエスト)には、必ずクッキーを保存してください。
エラー4: IPのジオロケーションとブラウザのパラメータが一致しない
ドイツのIPですが、ブラウザの言語はロシア語、タイムゾーンはUTC+3、通貨はルーブルです。アンチボットシステムはこの不一致を検出し、リクエストをブロックします。
解決策: ブラウザのパラメータをプロキシのジオロケーションと同期させます。ドイツのIPを使用する場合 — ドイツ語を設定し(Accept-Language: de-DE)、タイムゾーンをEurope/Berlin、通貨をEURに設定します。
エラー5: 無料または低品質のプロキシを使用
無料のプロキシや安価な公開プロキシは、すでにすべての主要な旅行サイトでブロックされています。それらのIPはブラックリストに載っており、悪い評判を持っています(スパムやDDoSに使用されていました)。
解決策: 信頼できるプロバイダーからの高品質のレジデンシャルまたはモバイルプロキシを使用してください。使用前にIPの評判をIPQualityScore、Scamalyticsなどのサービスで確認してください。
パーサーを起動する前のチェックリスト:
✅ プロキシ — レジデンシャルまたはモバイル、必要なジオロケーションを持つ
✅ User-Agent — 実際のブラウザ、ローテーションされる
✅ クッキー — セッション内で保存される
✅ 遅延 — リクエスト間に2〜5秒
✅ IPのローテーション — 3〜10リクエスト後(サイトに依存)