مقدمه
در این راهنمای عملی یاد میگیرید چگونه با استفاده از کتابخانهٔ CloudScraper در پایتون وبسایتهای محافظتشده توسط Cloudflare را اسکریپ کنید. فرض میکنیم خواننده یک توسعهدهندهٔ پایتون سطح متوسط است و به دنبال مثالهای کد، نکات پرفورمنس، مدیریت پراکسی و راهکارهای جایگزین است. در پایان این مقاله شما توانایی نصب و راهاندازی CloudScraper، پیکربندی پروفایلهای مرورگر و User-Agent، کار با پراکسیها و یکپارچهسازی سرویسهای حل کپچا را خواهید داشت؛ همچنین محدودیتها و بهترین روشهای عملی برای پایداری و جلوگیری از بلاک شدن را میدانید.
CloudScraper چیست و چطور کار میکند
CloudScraper یک کتابخانهٔ پایتون مبتنی بر requests است که تلاش میکند چالشهای جاوااسکریپتی و fingerprinting کلادفلر را حل کند تا درخواستها شبیه بازدیدکنندهٔ واقعی به نظر برسند. این کار با تنظیم هدرها، شبیهسازی مجموعهای از cipherها و اجرای برخی بخشهای لازم جاوااسکریپت برای حل چالشها انجام میشود.
مهم: Cloudflare بهطور مداوم روشهای تشخیص را بهروزرسانی میکند؛ بنابراین ابزارهای اوپنسورس ممکن است در برخی حالات از کار بیفتند. برای استفادهٔ قابلاطمینانتر، همیشه ترکیبی از پراکسیهای باکیفیت، مدیریت نشستها و محدود کردن نرخ درخواستها را به کار ببرید.
نصب
برای نصب سادهترین روش استفاده از pip است:
pip install cloudscraperاین دستور کتابخانه را در محیط پایتون شما نصب میکند. پس از نصب میتوانید آن را مانند یک requests.Session استفاده کنید، اما CloudScraper در پسزمینه تلاش میکند چالشهای Cloudflare را حل کند.
مثال پایه: استفادهٔ ساده
ایجاد یک نمونهٔ CloudScraper و گرفتن یک صفحه دقیقاً مشابه استفاده از requests است؛ تابعها همانند get و post هستند:
import cloudscraper
# ایجاد نمونهٔ CloudScraper
scraper = cloudscraper.create_scraper()
# ارسال درخواست GET به سایت هدف
response = scraper.get('http://somesite.com')
print(response.status_code)
print(response.text[:200])توضیح ورودیها و خروجیها:
- ورودی: URL بهعنوان رشته به scraper.get.
- خروجی: یک شیء response مشابه با requests.Response که شامل status_code و text یا content است.
خطبهخط:
- واردکردن کتابخانه.
- ایجاد جلسهٔ CloudScraper با create_scraper().
- ارسال درخواست و دریافت پاسخ.
نکته عملی: جلسهٔ اول ممکن است ~5 ثانیه تأخیر داشته باشد چون CloudScraper باید چالش را حل کند؛ این تأخیر تنها هنگام اولین تماس با دامنهٔ محافظتشده رخ میدهد چون پس از آن کوکیهای معتبر ذخیره میشوند.
پروفایلهای مرورگر و User-Agent
برای شبیهسازی بهتر، CloudScraper امکان مشخص کردن پروفایل مرورگر و دستگاه را در زمان ایجاد اسکرپر فراهم میکند. این کمک میکند هدرها و مجموعهٔ cipherها با User-Agent سازگار شوند.
پارامترهای متداول برای browser:
- browser: رشته؛ نمونهها 'chrome' یا 'firefox'.
- platform: رشته؛ مانند 'windows', 'linux', 'darwin', 'android', 'ios'.
- desktop: بولی؛ True یا False.
- mobile: بولی؛ True یا False.
- custom: رشتهٔ User-Agent دلخواه.
مثال: شبیهسازی Chrome روی ویندوز دسکتاپ:
import cloudscraper
scraper = cloudscraper.create_scraper(
browser={
'browser': 'chrome',
'platform': 'windows',
'desktop': True,
'mobile': False,
}
)
response = scraper.get('http://somesite.com')مثال برای شبیهسازی موبایل iOS:
import cloudscraper
scraper = cloudscraper.create_scraper(
browser={
'browser': 'chrome',
'platform': 'ios',
'desktop': False,
'mobile': True,
}
)
response = scraper.get('http://somesite.com')توضیح: اگر مقدار custom ست شود، کتابخانه سعی میکند User-Agent را با یک رکورد شناختهشده در فایل browsers.json تطبیق دهد تا هدرهای دیگر و cipherها مطابق آن تنظیم شوند؛ در غیر این صورت هدرهای عمومی تنظیم میشوند.
استفاده از پراکسیها
پراکسیها در اسکریپ کردن سایتهای محافظتشده بسیار مهماند. Cloudflare بر اساس IP پروفایلسازی انجام میدهد؛ بنابراین:
- از پراکسیهای باکیفیت (مناسب برای وب اسکریپینگ) استفاده کنید.
- برای یک session از همان پراکسی استفاده کنید — اگر IP که چالش را حل کرده با IP بعدی متفاوت باشد، احتمال نمایش مجدد چالش یا بلاک وجود دارد.
نحوهٔ استفاده از پراکسی مشابه requests است:
import cloudscraper
scraper = cloudscraper.create_scraper()
proxies = {
'http': 'http://proxy.example.com:8080',
'https': 'http://proxy.example.com:8081',
}
response = scraper.get('http://somesite.com', proxies=proxies)
print(response.status_code)نکات عملی:
- اگر از پراکسی با احراز هویت استفاده میکنید، رشتهٔ پراکسی را با نام کاربری و رمز عبور وارد کنید.
- برای کارهای مقیاسپذیر از استخر پراکسی و مدیریت نرخ (rate limiting) استفاده کنید تا IPها زیاد عوض نشوند.
یکپارچهسازی حلکنندهٔ CAPTCHA
گاهی صفحات علاوه بر چالشهای جاوااسکریپتی از کپچا هم استفاده میکنند. CloudScraper امکان یکپارچهسازی با سرویسهای ثالث حل کپچا را دارد؛ نمونهها شامل 2Captcha، anticaptcha، CapSolver و غیره هستند.
مثال ادغام با 2Captcha:
import cloudscraper
scraper = cloudscraper.create_scraper(
captcha={
'provider': '2captcha',
'api_key': 'YOUR_2CAPTCHA_API_KEY',
}
)
response = scraper.get('http://somesite.com')
print(response.status_code)توضیح: ورودی در اینجا یک دیکشنری captcha است که اطلاعات سرویسدهنده (provider) و کلید API را میگیرد. خروجی همان response معمولی است، اما در صورت نمایش کپچا CloudScraper تلاش میکند از سرویس تعریفشده کمک بگیرد.
نکات امنیتی و هزینه:
- کلیدهای API را در متغیرهای محیطی یا vault نگهداری کنید، نه در کد خام.
- حل کپچا هزینه دارد و میتواند برای حجم بالا گران تمام شود؛ صرفهجویی با کاهش درخواستهای غیرضروری و cache کردن پاسخها مؤثر است.
جایگزینها و استراتژیهای پایدارتر
بهدلیل بهروزرسانیهای مداوم Cloudflare، راهکارهای اوپنسورس ممکن است گاهی شکست بخورند. گزینهٔ عملیتر برای تولید در مقیاس این است که از پراکسیهای هوشمند استفاده کنید که خودشان bypassهای اختصاصی و بهروز نگهداشتهشده ارائه میدهند.
نمونهٔ ساختار درخواست به یک سرویس پراکسی aggregator (نمونهٔ کلی):
import requests
response = requests.get(
url='https://proxy.example.api/v1/',
params={
'api_key': 'YOUR_API_KEY',
'url': 'http://example.com/', # آدرس هدف
'bypass': 'cloudflare_level_1',
}
)
print('Body length:', len(response.content))مزیتها:
- 不用ی به مدیریت headless browserهای متعدد یا تحلیل دقیق جاوااسکریپت کلادفلر.
- معمولاً پایداری بیشتر و نگهداری فعال توسط تیمهای تجاری که سریعاً بروز میکنند.
عملیاتی: خطاها، همزمانی و بهترین روشها
برای یک اسکریپر قابلاطمینان به این نکات دقت کنید:
- Retry: برای خطاهای شبکه و پاسخهای 5xx از مکانیزم retry با backoff نمایی استفاده کنید؛ اما برای 4xx (مثلاً 403) با احتیاط عمل کنید چون ممکن است بلاک واقعی باشد.
- Timeout: همیشه timeout مناسب برای درخواستها تنظیم کنید تا تسکها معلق نمانند.
- Session reuse: از همان شیء CloudScraper برای چند درخواست به یک دامنه استفاده کنید تا کوکی و جلسۀ حلشده دوباره استفاده شود.
- محدودیت نرخ: نرخ درخواستها را به اندازهٔ رفتار انسانی تنظیم کنید (درج تأخیر، پراکندگی هندسی بین درخواستها و شبیهسازی مرور واقعی).
- لاگ و مانیتورینگ: لاگگیری وضعیت کدهای پاسخ و میزان موفقیت حل چالشها به شما کمک میکند سریعتر تشخیص دهید چه چیزی از کار افتاده است.
- امنیت: کلیدهای API (برای کپچا یا پراکسی) را رمزنگاری یا در متغیرهای محیطی نگهدارید؛ دسترسیها را محدود کنید.
جمعبندی
CloudScraper یک ابزار مفید برای اسکریپ کردن سایتهای محافظتشده توسط Cloudflare است اما نباید تنها تکیهگاه شما باشد. ترکیب آن با پراکسیهای باکیفیت، مدیریت نشستها، تنظیم پروفایل مرورگر و راهکارهای حل کپچا نتیجهٔ قابلاطمینانتری میدهد. برای عملیاتهای تولیدی و در مقیاس بالا، استفاده از پراکسیهای اختصاصی یا سرویسهای aggregator که bypassهای فعال نگهداری میکنند، معمولاً پایدارتر و مقرونبهصرفهتر است.
نکتهٔ آخر: همیشه قوانین سایت هدف و مسائل اخلاقی و قانونی را رعایت کنید — اسکریپ کردن دادهها بدون توجه به قوانین ممکن است پیامدهای حقوقی داشته باشد.





