بازگشت به وبلاگ

پروکسی برای پارس کردن Aviasales، Booking و Skyscanner: چگونه قیمت‌ها را بدون مسدودیت جمع‌آوری کنیم

راهنمای کامل انتخاب و تنظیم پروکسی برای نظارت بر قیمت‌ها در aggregatorهای سفر: چه نوع پروکسی‌هایی استفاده کنیم، چگونه از مسدود شدن جلوگیری کنیم و داده‌ها را از Aviasales، Booking، Skyscanner جمع‌آوری کنیم.

📅۱۸ اسفند ۱۴۰۴
```html

aggregatorهای سفر مانند Aviasales، Booking، Skyscanner به طور فعال از جمع‌آوری خودکار داده‌ها محافظت می‌کنند — IP را پس از 10-20 درخواست مسدود می‌کنند، CAPTCHA نشان می‌دهند و قیمت‌ها را برای ربات‌ها تحریف می‌کنند. اگر شما قیمت‌ها را برای بلیط‌های هواپیما یا هتل‌ها برای سرویس خود، برنامه‌های همکاری یا تحلیل بازار نظارت می‌کنید، بدون پروکسی‌های به درستی تنظیم شده، در عرض چند دقیقه کار پارسر، مسدود خواهید شد.

در این راهنما بررسی خواهیم کرد که چه پروکسی‌هایی برای پارس کردن پایدار سایت‌های سفر نیاز است، چگونه چرخش IP را تنظیم کنیم، چگونه از سیستم‌های ضد ربات Cloudflare و Akamai عبور کنیم و چه اشتباهاتی منجر به مسدودیت‌ها حتی با استفاده از پروکسی می‌شود.

چرا aggregatorهای سفر پارس کردن را مسدود می‌کنند و چگونه این کار را انجام می‌دهند

aggregatorهای سفر از پارس کردن خسارات واقعی متحمل می‌شوند: هر درخواست به API آن‌ها هزینه دارد (آن‌ها به شرکت‌های هواپیمایی و هتل‌ها برای دسترسی به داده‌ها پرداخت می‌کنند)، و رقبای آن‌ها از قیمت‌های جمع‌آوری شده برای جذب مشتریان استفاده می‌کنند. بنابراین Aviasales، Booking، Skyscanner، Kayak میلیون‌ها دلار در حفاظت ضد ربات سرمایه‌گذاری می‌کنند.

روش‌های اصلی شناسایی پارس کردن

1. تحلیل فرکانس درخواست‌ها از یک IP. کاربر عادی 3-5 درخواست جستجو در هر جلسه انجام می‌دهد، در حالی که پارسر — صدها درخواست در دقیقه. اگر از IP شما بیش از 15-20 درخواست در دقیقه بیاید، سیستم آن را به عنوان مشکوک علامت‌گذاری می‌کند. پس از 50-100 درخواست — مسدودیت به مدت 24 ساعت یا برای همیشه.

2. Fingerprinting مرورگر. سایت‌های سفر ده‌ها پارامتر جمع‌آوری می‌کنند: وضوح صفحه، منطقه زمانی، فونت‌های نصب شده، اثر انگشت WebGL، اثر انگشت canvas، زمینه صوتی. اگر این پارامترها با موقعیت جغرافیایی اعلام شده IP مطابقت نداشته باشد (به عنوان مثال، IP از مسکو، اما منطقه زمانی UTC+8) — این نشانه‌ای از پروکسی یا VPN است.

3. بررسی شهرت IP. سایت‌ها از پایگاه‌های داده پروکسی‌های شناخته شده، دیتاسنترها و سرورهای VPN استفاده می‌کنند. اگر IP شما در چنین پایگاه‌هایی ثبت شده باشد (به عنوان مثال، MaxMind GeoIP2، IPQualityScore، SEON)، درخواست‌ها مسدود می‌شوند یا CAPTCHA نشان داده می‌شود. Booking و Skyscanner به ویژه نسبت به IPهای موجود در دامنه‌های Amazon AWS، Google Cloud، DigitalOcean سخت‌گیر هستند.

4. تحلیل رفتاری. سیستم‌های ضد ربات حرکات ماوس، سرعت اسکرول، وقفه‌های بین کلیک‌ها را ردیابی می‌کنند. Selenium و Puppeteer بدون پچ‌های اضافی ردپایی از خود به جا می‌گذارند: ویژگی navigator.webdriver، عدم وجود پلاگین‌ها، اندازه‌های غیرمعمول پنجره. حتی با پروکسی، چنین ترافیکی به راحتی شناسایی می‌شود.

5. TLS-fingerprinting. سیستم‌های ضد ربات مدرن (Cloudflare، Akamai) پارامترهای TLS handshake را تحلیل می‌کنند: ترتیب cipher suites، گسترش‌ها، نسخه پروتکل. در Python requests و کتابخانه‌های استاندارد TLS-fingerprint با مرورگرها متفاوت است — این به سرعت ربات را افشا می‌کند.

مورد واقعی: یکی از مشتریان ما قیمت‌ها را در Booking از طریق 100 پروکسی دیتاسنتر (DigitalOcean) پارس کرد. پس از 2 ساعت کار، همه IPها به طور دائمی مسدود شدند — Booking دامنه دیتاسنتر را شناسایی کرده و به لیست سیاه اضافه کرد. انتقال به پروکسی‌های مسکونی مشکل را حل کرد: در طول یک ماه کار — هیچ مسدودیتی.

چه نوع پروکسی‌هایی برای نظارت بر قیمت‌ها مناسب هستند: مقایسه

برای پارس کردن aggregatorهای سفر از سه نوع پروکسی استفاده می‌شود: پروکسی‌های مسکونی، موبایلی و پروکسی‌های دیتاسنتر. هر نوع مزایا، معایب و سناریوهای خاص خود را دارد. انتخاب بستگی به حجم پارس کردن، بودجه و الزامات ناشناسی دارد.

نوع پروکسی سطح اعتماد سایت‌ها سرعت هزینه (تقریبی) بهترین برای
پروکسی‌های مسکونی بسیار بالا (IP کاربران خانگی) متوسط (300-800 میلی‌ثانیه) $$$ (بر اساس ترافیک) Booking، Expedia، Airbnb — سایت‌های با حفاظت سخت
پروکسی‌های موبایلی حداکثر (IP اپراتورهای موبایل) پایین (500-1500 میلی‌ثانیه) $$$$ (گران‌ترین) پارس کردن نسخه‌های موبایل، درخواست‌های API، عبور از Cloudflare
پروکسی‌های دیتاسنتر پایین (به راحتی شناسایی می‌شوند) بسیار بالا (50-150 میلی‌ثانیه) $ (ارزان‌ترین) API Aviasales، aggregatorهای کمتر محافظت شده، تست

ویژگی‌های انتخاب برای سایت‌های سفر خاص

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 باید فرانسوی باشد). کوکی‌ها، ارجاع‌دهنده، هدرهای مرورگر الزامی هستند. پروکسی‌های موبایلی بهترین نتایج را برای پارس کردن از طریق API موبایل نشان می‌دهند.

Kayak و Momondo — سطح محافظت متوسط. پروکسی‌های مسکونی — انتخاب بهینه. می‌توان از پروکسی‌های دیتاسنتر استفاده کرد، اما با چرخش الزامی و تأخیر بین درخواست‌ها (حداقل 10-15 ثانیه).

پروکسی‌های مسکونی در مقابل پروکسی‌های دیتاسنتر: چه چیزی برای سایت‌های سفر انتخاب کنیم

تفاوت اصلی پروکسی‌های مسکونی با پروکسی‌های دیتاسنتر — منبع IP است. پروکسی‌های مسکونی از IP ارائه‌دهندگان اینترنت خانگی واقعی (Ростелеком، МТС، 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های رسمی. اگر شما دسترسی همکاری به API Aviasales، API Skyscanner دارید — نوع پروکسی مهم نیست، API نسبت به منبع IP حساسیت کمتری دارد. پروکسی‌های دیتاسنتر سرعت بالا و هزینه پایین را ارائه می‌دهند.

2. تست و توسعه پارسر. در مرحله نوشتن و اشکال‌زدایی کد، از پروکسی‌های دیتاسنتر استفاده کنید — آن‌ها ارزان‌تر، سریع‌تر هستند و اگر چند IP مسدود شوند، ناراحت‌کننده نیست.

3. پارس کردن aggregatorهای کمتر محافظت شده. برخی از سایت‌های سفر منطقه‌ای یا aggregatorهای بلیط اتوبوس از حفاظت ضد ربات پیشرفته استفاده نمی‌کنند. برای آن‌ها پروکسی‌های دیتاسنتر با مجموعه بزرگ IP و چرخش کند کاملاً مناسب هستند.

نکته: انواع پروکسی‌ها را ترکیب کنید. از پروکسی‌های مسکونی برای درخواست‌های بحرانی (جستجوی اولیه، دریافت توکن‌ها، عبور از CAPTCHA) استفاده کنید، و پروکسی‌های دیتاسنتر را برای درخواست‌های انبوه به API یا نقاط پایانی کمتر محافظت شده به کار ببرید. این کار هزینه‌ها را 40-60% کاهش می‌دهد در حالی که ثبات را حفظ می‌کند.

استراتژی چرخش IP: چگونه پروکسی را در هنگام پارس کردن تغییر دهیم

چرخش صحیح IP — کلید پارس کردن بلندمدت بدون مسدودیت است. اگر IP را خیلی سریع تغییر دهید، به سرعت مجموعه آدرس‌ها را تمام کرده و هزینه‌های بالایی برای ترافیک خواهید داشت. اگر خیلی کم تغییر دهید — فعالیت مشکوکی را بر روی یک IP انباشته کرده و مسدود خواهید شد.

انواع چرخش پروکسی

1. چرخش بر اساس درخواست‌ها (پروکسی‌های چرخشی). IP به طور خودکار پس از هر درخواست یا پس از تعداد مشخصی از درخواست‌ها تغییر می‌کند. بیشتر ارائه‌دهندگان پروکسی‌های مسکونی این حالت را ارائه می‌دهند: شما به یک نقطه پایانی متصل می‌شوید (به عنوان مثال، gate.proxycove.com:8000)، و IP در سمت ارائه‌دهنده تغییر می‌کند.

مزایا: سادگی تنظیم، نیازی به مدیریت دستی مجموعه IP نیست، خطر حداقلی برای مسدود شدن یک IP.
معایب: نمی‌توان جلسات را کنترل کرد (اگر نیاز به حفظ کوکی‌ها یا توکن‌ها دارید)، هر درخواست = IP جدید = هزینه‌های جدید ترافیک.

2. جلسات چسبنده (پروکسی‌های سسیونی). IP برای جلسه شما برای مدت معینی (معمولاً 10-30 دقیقه) ثابت می‌ماند. شما چند درخواست را از یک IP انجام می‌دهید، سپس به طور خودکار تغییر می‌کند. این تنظیمات از طریق پارامترهای پروکسی (به عنوان مثال، افزودن session-id123 به نام کاربری) انجام می‌شود.

مزایا: می‌توان کوکی‌ها و توکن‌ها را در چارچوب جلسه حفظ کرد، مصرف ترافیک کمتر (یک 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 (مسکو) باشد — این نشانه‌ای از پروکسی است. سایت ممکن است CAPTCHA نشان دهد یا درخواست را مسدود کند.

3. بر اساس ارز و تنظیمات حساب. اگر شما در حساب Booking وارد شده‌اید، سایت کشور شما را در زمان ثبت‌نام به خاطر سپرده است. تغییر IP به کشور دیگر باعث ایجاد شک و تردید می‌شود — Booking ممکن است از شما بخواهد هویت خود را تأیید کنید یا حساب شما را مسدود کند.

چگونه به درستی موقعیت جغرافیایی پروکسی را انتخاب کنیم

برای جمع‌آوری قیمت‌ها در بازار خاص: از IP کشوری که قیمت‌های آن برای شما مهم است استفاده کنید. اگر قیمت‌ها را برای بازار روسیه نظارت می‌کنید — پروکسی‌های مسکونی روسی بگیرید. برای بازار اروپایی — پروکسی از کشورهای اتحادیه اروپا (آلمان، فرانسه، لهستان). برای ایالات متحده — پروکسی‌های آمریکایی.

برای عبور از مسدودیت‌های جغرافیایی: برخی از سایت‌های سفر یا پیشنهادات خاص فقط از کشورهای خاص در دسترس هستند. به عنوان مثال، پروازهای داخلی ایالات متحده معمولاً هنگام رزرو از IP آمریکایی ارزان‌تر هستند. از پروکسی کشور مورد نظر استفاده کنید + زبان مرورگر و منطقه زمانی را برای آن کشور تنظیم کنید.

برای پارس کردن داده‌های جهانی: اگر به قیمت‌ها برای همه بازارها نیاز دارید (به عنوان مثال، برای تحلیل)، از مجموعه پروکسی از کشورهای مختلف استفاده کنید. موقعیت جغرافیایی را به همراه IP بچرخانید: درخواست از IP آلمانی → قیمت‌های آلمانی، درخواست از IP فرانسوی → قیمت‌های فرانسوی.

اشتباه: استفاده از IP یک کشور، اما جستجوی هتل‌ها/بلیط‌ها در کشور دیگری با ارز غیرمتناسب. به عنوان مثال، IP از روسیه، جستجوی هتل‌ها در تایلند، ارز — یورو. این به نظر مشکوک می‌رسد. یا از IP کشور مقصد استفاده کنید، یا از IP کشور واقعی خود با ارز آن استفاده کنید.

تنظیم پروکسی برای پارسرها و اسکریپت‌های محبوب

تنظیم پروکسی برای محبوب‌ترین ابزارهای پارس کردن سایت‌های سفر را بررسی خواهیم کرد. مثال‌ها برای پروکسی‌های مسکونی با چرخش ارائه شده‌اند، اما برای سایر انواع نیز مناسب هستند.

Python + requests / httpx

ساده‌ترین گزینه برای پارس کردن API یا صفحات ساده بدون JavaScript. مناسب برای API Aviasales، API Skyscanner، نقاط پایانی ساده بدون 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 برای چند درخواست) دارید، 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) — فریم‌ورکی برای پارس کردن مقیاس‌پذیر. از پروکسی از طریق 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های خودکار. برای سایت‌های سفر بسیار مناسب است.

عبور از سیستم‌های ضد ربات Cloudflare، PerimeterX، Akamai

حتی با پروکسی‌های مسکونی با کیفیت، ممکن است با مسدودیت‌ها مواجه شوید اگر از سیستم‌های ضد ربات به درستی عبور نکنید. Booking از Cloudflare استفاده می‌کند، Airbnb — PerimeterX، و برخی سایت‌ها — Akamai Bot Manager. این سیستم‌ها نه تنها IP را تحلیل می‌کنند، بلکه رفتار، fingerprint مرورگر و TLS handshake را نیز بررسی می‌کنند.

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 fingerprint صحیح. Cloudflare TLS handshake را تحلیل می‌کند. از کتابخانه‌هایی که TLS مرورگرها را شبیه‌سازی می‌کنند استفاده کنید: curl-impersonate (شبیه‌سازی TLS Chrome/Firefox)، tls-client (Go)، hrequests (Python).

4. CAPTCHA را به طور خودکار حل کنید. اگر Cloudflare CAPTCHA نشان دهد (Turnstile)، از خدمات حل CAPTCHA استفاده کنید: 2Captcha، Anti-Captcha، CapSolver. آن‌ها از طریق API ادغام می‌شوند و هزینه آن‌ها 1-3 دلار برای 1000 حل است.

PerimeterX (Airbnb، برخی سایت‌های سفر)

PerimeterX — یکی از پیچیده‌ترین سیستم‌های ضد ربات است. این سیستم رفتار کاربر (حرکات ماوس، کلیک‌ها، اسکرول) را تحلیل می‌کند، fingerprint دستگاه را ایجاد می‌کند و کوکی‌ها و localStorage را بررسی می‌کند.

روش‌های عبور:

1. رفتار کاربر را شبیه‌سازی کنید. بین اقدامات وقفه‌های تصادفی (2-5 ثانیه) اضافه کنید، ماوس را حرکت دهید، صفحه را اسکرول کنید. در Puppeteer از کتابخانه ghost-cursor برای حرکات واقعی ماوس استفاده کنید.

2. کوکی‌ها و localStorage را حفظ کنید. PerimeterX توکن‌هایی تولید می‌کند که در کوکی‌ها (_px3، _pxhd) و localStorage ذخیره می‌شوند. اگر IP را تغییر دهید، اما کوکی‌ها را حفظ کنید — این مشکوک است. یا IP را تغییر دهید + کوکی‌ها را پاک کنید، یا از جلسات چسبنده استفاده کنید (یک IP = یک جلسه با کوکی‌ها).

3. از پروکسی‌های موبایلی استفاده کنید. PerimeterX نسبت به IPهای دیتاسنتر سخت‌گیرتر است. پروکسی‌های موبایلی بهترین نتایج را برای عبور از PerimeterX نشان می‌دهند.

Akamai Bot Manager

Akamai داده‌های حسگری (شتاب‌سنج، ژیروسکوپ در موبایل‌ها)، WebGL fingerprint، زمینه صوتی و عملکرد دستگاه را تحلیل می‌کند. عبور نیاز به شبیه‌سازی پیشرفته مرورگر دارد.

توصیه‌ها: از مرورگرهای واقعی (نه headless)، پروکسی‌های موبایلی استفاده کنید، تأخیرهای تصادفی اضافه کنید، رویدادهای لمسی (touch events) را شبیه‌سازی کنید. برای موارد پیچیده — از مزارع مرورگر (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)). برای سایت‌های سفر بهینه است: 2-5 ثانیه بین درخواست‌ها از یک IP، 0.5-2 ثانیه بین درخواست‌ها از IPهای مختلف.

اشتباه 3: نادیده گرفتن کوکی‌ها و جلسات

سایت‌های سفر از کوکی‌ها برای ردیابی جلسات، ذخیره توکن‌های سیستم‌های ضد ربات و شخصی‌سازی قیمت‌ها استفاده می‌کنند. اگر هر درخواست را بدون کوکی‌ها انجام دهید (مانند یک کاربر جدید)، این مشکوک است.

راه‌حل: از requests.Session() (Python) استفاده کنید یا کوکی‌ها را بین درخواست‌ها در Puppeteer حفظ کنید. برای جلسات چسبنده (یک 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 درخواست (بسته به سایت)

```