پروکسی چرخشی Python Requests: چگونه IPها را برای وب اسکرپینگ بچرخانیم (و چه زمانی دروازه WireGuard بهتر است)
بیاموزید چگونه پروکسیها را در Python requests برای وب اسکرپینگ قابلاعتماد بچرخانید، شامل پشتیبانی SOCKS5، مدیریت نشست و بازیابی خطا. پروکسیهای چرخشی را با دروازههای اختصاصی WireGuard برای نیازهای IP پایدار مقایسه کنید.
مرور کلی
چرخش پروکسیها با requests پایتون روشی رایج برای توزیع درخواستهای وب اسکرپینگ میان چندین آدرس IP است و احتمال محدودسازی نرخ یا بلاک شدن را کاهش میدهد. این آموزش نشان میدهد چگونه چرخش پروکسی را در Python requests پیادهسازی کنید، شامل پروکسیهای HTTP و SOCKS5، منطق تلاش مجدد و راستیآزمایی. همچنین توضیح میدهد چه زمانی یک دروازه اختصاصی WireGuard (مانند NordLayer) گزینه مناسبتری نسبت به پروکسیهای چرخشی است.
پیشنیازها
- نصب Python 3.8 یا جدیدتر.
- کتابخانه
requests. - برای پروکسیهای SOCKS5، بسته
requests[socks]را نصب کنید که شامل PySocks است. - فهرستی از سرورهای پروکسی (HTTP، HTTPS یا SOCKS5) از یک ارائهدهنده.
نحوه کار چرخش پروکسی با Python Requests
requests از پروکسیها از طریق پارامتر proxies پشتیبانی میکند. اگر پروکسی را پیش از فراخوانی requests.get() بچرخانید، هر درخواست میتواند از پروکسی متفاوتی استفاده کند. برای SOCKS5، شمای آدرس socks5:// یا socks5h:// است (برای resolve کردن DNS از طریق پروکسی).
مراحل
- کتابخانههای موردنیاز را نصب کنید.
pip install requests requests[socks] - فهرست پروکسی خود را آماده کنید. اعتبارنامهها را در متغیرهای محیطی یا یک فایل پیکربندی نگه دارید، نه در کد منبع.
import os proxies_list = [ 'http://user:[email protected]:8080', 'http://user:[email protected]:8080', 'socks5://user:[email protected]:1080', ] - یک استراتژی چرخش انتخاب کنید. سادهترین کار چرخش در یک فهرست است.
from itertools import cycle proxy_pool = cycle(proxies_list) - درخواستها را با یک پروکسی چرخشی ارسال کنید. تایماوتها را لحاظ کنید و استثناها را مدیریت کنید.
import requests url = 'https://httpbin.org/ip' for i in range(5): proxy = next(proxy_pool) try: resp = requests.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10) print(resp.json()) except requests.exceptions.RequestException as e: print(f'Proxy {proxy} failed: {e}') - برای چرخش قویتر، چرخش را با منطق تلاش مجدد با استفاده از
requests.SessionوHTTPAdapterترکیب کنید.from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry session = requests.Session() retries = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504]) session.mount('http://', HTTPAdapter(max_retries=retries)) session.mount('https://', HTTPAdapter(max_retries=retries)) proxy = next(proxy_pool) resp = session.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10) print(resp.json()) - تأیید کنید که IP تغییر میکند. نقطه پایانی
https://httpbin.org/ipIP مبدأ را برمیگرداند. آن را برای هر درخواست لاگ یا چاپ کنید. - بررسیهای سلامت را پیادهسازی کنید. پروکسیهایی را که مکرراً شکست میخورند از استخر حذف کنید.
def is_proxy_alive(proxy): try: requests.get('https://httpbin.org/ip', proxies={'http': proxy, 'https': proxy}, timeout=5) return True except requests.exceptions.RequestException: return False healthy_proxies = [p for p in proxies_list if is_proxy_alive(p)]
عیبیابی مشکلات رایج
- 407 Proxy Authentication Required: نام کاربری و رمز عبور را در URL پروکسی بررسی کنید. کاراکترهای خاص را percent-encode کنید.
- خطاهای اتصال SOCKS5: مطمئن شوید
requests[socks]را نصب کردهاید و URI پروکسی ازsocks5://یاsocks5h://استفاده میکند. - خطاهای SSL: برخی پروکسیها از تونلزنی HTTPS پشتیبانی نمیکنند. از پروکسیهای HTTP فقط برای مقصدهای HTTP استفاده کنید، یا به ارائهدهندهای بروید که از CONNECT پشتیبانی میکند.
- پاسخهای کند: timeout را افزایش دهید، همروندی را کاهش دهید، یا از پروکسی با تأخیر کمتر استفاده کنید.
- تغییر نکردن IP: با بررسی
resp.json()تأیید کنید که واقعاً از پروکسی استفاده میشود. همچنین بررسی کنید که کد شما پروکسی را پیش از هر درخواست میچرخاند.
چه زمانی یک دروازه اختصاصی WireGuard منطقیتر است
پروکسیهای چرخشی برای اسکرپینگ ناشناس در مقیاس بزرگ ایدهآل هستند، جایی که هر درخواست میتواند از IP متفاوتی بیاید. با این حال، برخی کارها به یک آدرس IP پایدار و اختصاصی نیاز دارند:
- حفظ یک نشست واردشده در سایتی که تغییر IP را علامتگذاری میکند.
- رهگیری رتبه SEO از یک مکان ثابت.
- دسترسی به ابزارها یا APIهای داخلی با allowlisting IP. برای این موارد، یک دروازه اختصاصی WireGuard مانند NordLayer یک تونل VPN پایدار و در سطح تجاری با صورتحساب ماهانه ثابت فراهم میکند. NordLayer دروازههای اختصاصی ارائه میدهد، بنابراین تیم شما برای دسترسی امن به شبکه یک IP ثابت میگیرد. این سرویس پروکسی چرخشی نیست، اما مکمل پروکسیهای چرخشی است، چون مواردی را پوشش میدهد که به یک IP خروجی ثابت نیاز دارند.
خلاصه
میتوانید پروکسیها را در Python requests با چرخش در یک فهرست پروکسی، مدیریت استثناها و تأیید IP مبدأ بچرخانید. برای SOCKS5، requests[socks] را نصب کنید. از منطق تلاش مجدد و بررسیهای سلامت استفاده کنید تا اسکرپینگ قابلاعتماد بماند. وقتی به یک IP پایدار و اختصاصی بهجای چرخش نیاز دارید، یک دروازه اختصاصی WireGuard مانند NordLayer را برای دسترسی تیمی و کارهای با IP ثابت در نظر بگیرید.