Skip to content
Intermediate / 2 min read

پروکسی چرخشی Python Requests: چگونه IPها را برای وب اسکرپینگ بچرخانیم (و چه زمانی دروازه WireGuard بهتر است)

بیاموزید چگونه پروکسیها را در Python requests برای وب اسکرپینگ قابلاعتماد بچرخانید، شامل پشتیبانی SOCKS5، مدیریت نشست و بازیابی خطا. پروکسیهای چرخشی را با دروازههای اختصاصی WireGuard برای نیازهای IP پایدار مقایسه کنید.

SOCKS5 WireGuard وب اسکرپینگ حریم خصوصی/ناشناسی

مرور کلی

چرخش پروکسیها با 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 از طریق پروکسی).

مراحل

  1. کتابخانههای موردنیاز را نصب کنید.
    pip install requests requests[socks]
    
  2. فهرست پروکسی خود را آماده کنید. اعتبارنامهها را در متغیرهای محیطی یا یک فایل پیکربندی نگه دارید، نه در کد منبع.
    import os
    proxies_list = [
        'http://user:[email protected]:8080',
        'http://user:[email protected]:8080',
        'socks5://user:[email protected]:1080',
    ]
    
  3. یک استراتژی چرخش انتخاب کنید. سادهترین کار چرخش در یک فهرست است.
    from itertools import cycle
    proxy_pool = cycle(proxies_list)
    
  4. درخواستها را با یک پروکسی چرخشی ارسال کنید. تایماوتها را لحاظ کنید و استثناها را مدیریت کنید.
    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}')
    
  5. برای چرخش قویتر، چرخش را با منطق تلاش مجدد با استفاده از 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())
    
  6. تأیید کنید که IP تغییر میکند. نقطه پایانی https://httpbin.org/ip IP مبدأ را برمیگرداند. آن را برای هر درخواست لاگ یا چاپ کنید.
  7. بررسیهای سلامت را پیادهسازی کنید. پروکسیهایی را که مکرراً شکست میخورند از استخر حذف کنید.
    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 ثابت در نظر بگیرید.