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

چگونه از مسدود شدن در درخواست‌های مکرر به API وایلدبریس، اوزون و آویتو جلوگیری کنیم

دلایل مسدود شدن API بازارها در هنگام پارس کردن قیمت‌ها و موجودی‌ها را بررسی می‌کنیم و نشان می‌دهیم چگونه پروکسی، تأخیرها و هدرها را به درستی تنظیم کنیم تا بدون مسدود شدن به طور پایدار کار کند.

📅۱۰ بهمن ۱۴۰۴
```html

اگر شما به نظارت بر قیمت‌های رقبای خود، پارس کردن موجودی کالاها یا قرار دادن خودکار آگهی‌ها در بازارهای آنلاین مشغول هستید — حتماً با مسدود شدن‌ها مواجه شده‌اید. API Wildberries، Ozon، یاندکس.مارکت و آویتو به شدت در برابر اتوماسیون محافظت می‌شوند: تعداد درخواست‌ها را محدود می‌کنند، آدرس‌های IP را مسدود می‌کنند و از شما CAPTCHA می‌خواهند. در این راهنما بررسی می‌کنیم که چرا مسدود شدن‌ها اتفاق می‌افتند و چگونه پارسر را تنظیم کنیم تا بدون مسدود شدن به طور پایدار برای ماه‌ها کار کند.

چرا بازارهای آنلاین درخواست‌های مکرر به API را مسدود می‌کنند

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

دلایل اصلی مسدود شدن‌ها:

  • محافظت از داده‌های رقابتی. Wildberries و Ozon نمی‌خواهند که رقبای آن‌ها به راحتی به اطلاعات قیمت‌ها، موجودی‌ها و کالاهای محبوب دسترسی پیدا کنند. این داده‌ها یک راز تجاری هستند.
  • کاهش بار بر روی سرورها. یک پارسر می‌تواند به اندازه 10,000 خریدار معمولی درخواست تولید کند. این موضوع هزینه‌های هاستینگ را افزایش می‌دهد.
  • مبارزه با تقلب و اسپم. سیستم‌های خودکار برای تقلب در تعداد بازدیدها، نظرات و قرار دادن انبوه آگهی‌ها در آویتو استفاده می‌شوند.
  • منافع مالی API. برخی از بازارهای آنلاین API‌های رسمی پولی با محدودیت‌هایی ارائه می‌دهند. با مسدود کردن پارسینگ رایگان، آن‌ها خرید دسترسی را تشویق می‌کنند.

به عنوان مثال، اگر شما هر ساعت قیمت 5000 کالا را نظارت کنید — این معادل 120,000 درخواست در روز است. از یک آدرس IP این موضوع مشکوک به نظر می‌رسد و سیستم حفاظتی بازار آنلاین به سرعت دسترسی شما را مسدود می‌کند.

کدام روش‌های حفاظتی توسط Wildberries، Ozon و آویتو استفاده می‌شود

بازارهای آنلاین مدرن از حفاظت چند لایه‌ای در برابر پارس کردن استفاده می‌کنند. درک این مکانیزم‌ها به شما کمک می‌کند تا دور زدن مسدود شدن‌ها را به درستی تنظیم کنید.

روش حفاظتی چگونه کار می‌کند چگونه دور بزنیم
محدودیت نرخ محدودیت درخواست‌ها از یک IP: 100-500 در ساعت تأخیرها بین درخواست‌ها + چرخش IP
لیست سیاه IP مسدود کردن پروکسی‌های معروف مرکز داده استفاده از پروکسی‌های مقیم
بررسی User-Agent مسدود کردن درخواست‌ها بدون User-Agent مرورگر تنظیم هدرهای واقعی
بررسی‌های JavaScript نیاز به اجرای کد JS برای دریافت داده‌ها استفاده از مرورگرهای headless
Captcha بررسی اجباری در صورت فعالیت مشکوک کاهش فرکانس درخواست‌ها، خدمات حل CAPTCHA
TLS Fingerprinting تشخیص اتوماسیون بر اساس پارامترهای TLS استفاده از کتابخانه‌ها با اثر انگشت صحیح
تحلیل رفتاری تحلیل الگوها: سرعت کلیک‌ها، حرکات ماوس تصادفی‌سازی تأخیرها، شبیه‌سازی رفتار انسانی

Wildberries از حفاظت تهاجمی استفاده می‌کند: محدودیت حدود 200-300 درخواست در ساعت از یک IP، بررسی User-Agent و چالش‌های JavaScript. در صورت تجاوز از محدودیت، شما HTTP 429 (بیش از حد درخواست) یا 403 (ممنوع) دریافت خواهید کرد.

Ozon نسبت به پارس کردن از طریق API بیشتر مهربان است، اما به شدت آدرس‌های IP مراکز داده را مسدود می‌کند. آن‌ها از خدمات شناسایی نوع IP (DataCenter در مقابل Residential) استفاده می‌کنند، بنابراین پروکسی‌های معمولی اغلب کار نمی‌کنند.

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

محدودیت نرخ: چگونه تأخیرها را بین درخواست‌ها به درستی تنظیم کنیم

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

تنظیمات پیشنهادی برای بازارهای آنلاین محبوب:

Wildberries:

  • تأخیر بین درخواست‌ها: 2-5 ثانیه (تصادفی)
  • حداکثر 150-200 درخواست در ساعت از یک IP
  • استراحت 10-15 دقیقه بعد از هر 100 درخواست
  • چرخش IP بعد از 200 درخواست

Ozon:

  • تأخیر بین درخواست‌ها: 1-3 ثانیه
  • حداکثر 300-400 درخواست در ساعت از یک IP
  • استفاده از پروکسی‌های مقیم الزامی است
  • چرخش IP بعد از 300 درخواست

آویتو:

  • تأخیر بین درخواست‌ها: 3-7 ثانیه
  • حداکثر 50-100 درخواست در ساعت (محدودیت‌های سخت)
  • IP باید با شهر آگهی مطابقت داشته باشد
  • یک IP = یک حساب کاربری (مخلوط نکنید)

چگونه تأخیرهای تصادفی را پیاده‌سازی کنیم: از فواصل ثابت مانند "دقیقاً 3 ثانیه" استفاده نکنید — این به عنوان ربات به نظر می‌رسد. تصادفی‌سازی کنید: از 2 تا 5 ثانیه. بیشتر پارسرها این را از طریق تنظیمات پشتیبانی می‌کنند.

به عنوان مثال، در Python با کتابخانه requests این به این صورت است:

import time
import random
import requests

def make_request(url, proxies):
    response = requests.get(url, proxies=proxies)
    # تأخیر تصادفی از 2 تا 5 ثانیه
    delay = random.uniform(2.0, 5.0)
    time.sleep(delay)
    return response

# مثال استفاده
proxy = {
    'http': 'http://username:password@proxy.example.com:8000',
    'https': 'http://username:password@proxy.example.com:8000'
}

for product_id in product_list:
    url = f'https://card.wb.ru/cards/detail?nm={product_id}'
    response = make_request(url, proxy)
    # پردازش داده‌ها...

نکته مهم: بعد از هر 100-200 درخواست یک استراحت طولانی (10-20 دقیقه) داشته باشید یا IP را تغییر دهید. این رفتار انسانی را شبیه‌سازی می‌کند که کالاها را مرور می‌کند و سپس به کارهای دیگر می‌پردازد.

چرخش پروکسی برای توزیع بار

حتی با تأخیرهای صحیح، یک IP نمی‌تواند بار طولانی را تحمل کند. راه حل — چرخش پروکسی: توزیع درخواست‌ها بین چندین آدرس IP. این اساس پارس کردن پایدار در بازارهای آنلاین است.

انواع پروکسی برای پارس کردن بازارهای آنلاین:

نوع پروکسی مزایا معایب برای چه کارهایی مناسب است
مرکز داده سریع، ارزان، پایدار به راحتی شناسایی می‌شوند، اغلب در لیست‌های مسدود شده هستند یاندکس.مارکت، بازارهای آنلاین کوچک
مقیم IP‌های واقعی کاربران خانگی، ریسک مسدود شدن کم گران‌تر، کندتر از مراکز داده Wildberries، Ozon، آویتو
موبایل IP‌های اپراتورهای موبایل، حداکثر ناشناسی گران‌ترین، سرعت متغیر دور زدن مسدود شدن‌های سخت آویتو

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

استراتژی‌های چرخش پروکسی:

  • چرخش بعد از N درخواست. IP را بعد از هر 100-300 درخواست تغییر دهید. این تعادل بهینه‌ای بین کارایی و ایمنی است.
  • چرخش بر اساس زمان. IP را هر 30-60 دقیقه تغییر دهید. برای جلسات طولانی پارس کردن مناسب است.
  • جلسات چسبنده. از یک IP برای تمام درخواست‌ها به یک کالا/دسته استفاده کنید، سپس تغییر دهید. این موضوع مشکوک بودن را کاهش می‌دهد.
  • پیوند جغرافیایی. برای آویتو الزامی است: آگهی‌های مسکو را از طریق IP‌های مسکو پارس کنید، آگهی‌های کازان را از طریق IP‌های کازان.

بیشتر ارائه‌دهندگان پروکسی‌های مقیم چرخش خودکار را ارائه می‌دهند: شما یک endpoint دریافت می‌کنید و IP به طور خودکار با فرکانس تعیین شده یا بعد از هر درخواست تغییر می‌کند. این کار تنظیم پارسر را ساده می‌کند.

مثال تنظیم استخر پروکسی در Python:

import requests
import random

# لیست پروکسی (می‌توان از فایل بارگذاری کرد)
proxy_list = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    'http://user:pass@proxy3.example.com:8000',
    # ... 50-100 پروکسی دیگر
]

def get_random_proxy():
    proxy = random.choice(proxy_list)
    return {
        'http': proxy,
        'https': proxy
    }

# استفاده
for product_id in product_list:
    proxy = get_random_proxy()  # پروکسی تصادفی برای هر درخواست
    response = requests.get(url, proxies=proxy)
    # پردازش...

تنظیم هدرها و اثر انگشت برای شبیه‌سازی مرورگر

بازارهای آنلاین نه تنها IP و فرکانس درخواست‌ها را تحلیل می‌کنند، بلکه هدرهای HTTP را نیز بررسی می‌کنند. اگر پارسر شما درخواست‌ها را با هدرهای پیش‌فرض کتابخانه ارسال کند (به عنوان مثال، python-requests/2.28.0)، به سرعت به عنوان ربات شناسایی می‌شود.

هدرهای الزامی برای شبیه‌سازی مرورگر:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    'Accept-Encoding': 'gzip, deflate, br',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Cache-Control': 'max-age=0',
    'Referer': 'https://www.google.com/'
}

نکات مهم:

  • User-Agent باید با مرورگر واقعی مطابقت داشته باشد. از نسخه‌های به‌روز Chrome، Firefox، Safari استفاده کنید. User-Agent را هر 100-200 درخواست تغییر دهید.
  • Accept-Language باید با جغرافیای پروکسی مطابقت داشته باشد. اگر از IP‌های روسی استفاده می‌کنید — ru-RU را تنظیم کنید، برای IP‌های اوکراینی — uk-UA.
  • Referer نشان می‌دهد که کاربر از کجا آمده است. برای اولین درخواست از Google/Yandex استفاده کنید، برای درخواست‌های بعدی — صفحات داخلی بازار آنلاین.
  • هدرهای Sec-Fetch-* واقع‌گرایی را اضافه می‌کنند. مرورگرهای مدرن به طور خودکار آن‌ها را ارسال می‌کنند.

TLS Fingerprinting: سیستم‌های حفاظتی پیشرفته (Ozon، Wildberries) پارامترهای اتصال TLS را تحلیل می‌کنند: ترتیب cipher suites، گسترش‌ها، نسخه پروتکل. کتابخانه‌های استاندارد Python/Node.js اثر انگشت متفاوتی نسبت به مرورگرها دارند.

راه حل — استفاده از کتابخانه‌های تخصصی:

  • curl-impersonate (Python) — اثر انگشت TLS مرورگر Chrome/Firefox را شبیه‌سازی می‌کند
  • tls-client (Go، Python bindings) — اثر انگشت TLS قابل تنظیم
  • Playwright / Puppeteer — مرورگرهای headless با TLS واقعی

برای بیشتر وظایف پارس کردن بازارهای آنلاین، هدرهای HTTP صحیح و پروکسی‌های مقیم کافی است. TLS fingerprinting فقط در هنگام کار با امن‌ترین API‌ها حیاتی است.

API در مقابل وب‌اسکرپینگ: کدام یک برای پارس کردن ایمن‌تر است

بازارهای آنلاین دو روش برای دریافت داده‌ها دارند: API رسمی و پارس کردن صفحات HTML (وب‌اسکرپینگ). کدام یک را برای کار پایدار انتخاب کنیم؟

پارامتر API رسمی وب‌اسکرپینگ
قانونی بودن ✅ مجاز است، مستندات وجود دارد ⚠️ منطقه خاکستری، ممکن است شرایط خدمات را نقض کند
پایداری ✅ ساختار داده پایدار ❌ در صورت طراحی مجدد سایت خراب می‌شود
محدودیت‌ها ⚠️ محدودیت‌های رسمی سخت ⚠️ غیررسمی، اما دارای حفاظت است
دسترسی به داده‌ها ⚠️ همه داده‌ها در دسترس نیستند ✅ همه داده‌های عمومی
سرعت ✅ پاسخ‌های سریع JSON ❌ به دلیل HTML کندتر است
هزینه ⚠️ اغلب هزینه‌بر است ✅ رایگان (فقط پروکسی)

توصیه‌ها برای انتخاب:

  • از API رسمی استفاده کنید اگر: به حجم‌های کوچک داده (تا 10,000 کالا در روز) نیاز دارید، آماده‌اید برای دسترسی هزینه پرداخت کنید، قانونی بودن و پایداری برایتان مهم است.
  • از وب‌اسکرپینگ استفاده کنید اگر: به حجم‌های بزرگ داده نیاز دارید، API رسمی اطلاعات مورد نیاز را ارائه نمی‌دهد (به عنوان مثال، قیمت‌های رقبا)، بودجه محدود است.

رویکرد ترکیبی: بسیاری از پارسرهای حرفه‌ای هر دو روش را ترکیب می‌کنند. به عنوان مثال، لیست کالاها را از طریق API دریافت می‌کنند (سریع و قانونی)، و اطلاعات دقیق درباره قیمت‌ها و موجودی‌ها را از صفحات HTML پارس می‌کنند (داده‌های بیشتر).

API‌های داخلی بازارهای آنلاین: علاوه بر API رسمی، بازارهای آنلاین از API‌های داخلی برای کار با سایت استفاده می‌کنند. به عنوان مثال، Wildberries داده‌های کالاها را از طریق https://card.wb.ru/cards/detail بارگذاری می‌کند. این endpoint‌ها مستند نشده‌اند، اما سریع‌تر از پارس کردن HTML کار می‌کنند. نقطه منفی — ممکن است بدون هشدار تغییر کنند.

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

بیشتر فروشندگان و بازاریابان از ابزارهای آماده برای پارس کردن بازارهای آنلاین استفاده می‌کنند. بیایید ببینیم چگونه پروکسی و محدودیت‌ها را در راه‌حل‌های محبوب به درستی تنظیم کنیم.

تنظیم Scrapy (فریم‌ورک Python)

Scrapy — فریم‌ورک محبوب برای وب‌اسکرپینگ است. برای کار با بازارهای آنلاین، به settings.py اضافه کنید:

# تأخیرها بین درخواست‌ها
DOWNLOAD_DELAY = 3  # 3 ثانیه
RANDOMIZE_DOWNLOAD_DELAY = True  # تصادفی‌سازی از 0.5*DELAY تا 1.5*DELAY

# محدودیت‌های درخواست‌های همزمان
CONCURRENT_REQUESTS = 8
CONCURRENT_REQUESTS_PER_DOMAIN = 2

# تنظیم پروکسی (از طریق middleware rotating-proxies)
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    # ... لیست پروکسی
]

# چرخش User-Agent
USER_AGENT_LIST = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Safari/537.36',
    # ... لیست User-Agent
]

# تلاش‌های مجدد در صورت خطا
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

تنظیم Octoparse (پارسر بصری بدون کد)

Octoparse — ابزار محبوبی برای پارس کردن بدون برنامه‌نویسی است. تنظیم پروکسی و محدودیت‌ها:

  1. تنظیمات تسک را باز کنید → گزینه‌های پیشرفته
  2. در بخش "Network" گزینه "استفاده از سرور پروکسی" را فعال کنید
  3. لیست پروکسی را به فرمت IP:PORT:USER:PASS اضافه کنید
  4. گزینه "چرخش IP برای هر درخواست" را برای چرخش خودکار فعال کنید
  5. در بخش "سرعت" گزینه "کند" یا "سفارشی" با تأخیر 3-5 ثانیه را تنظیم کنید
  6. گزینه "تأخیر تصادفی" را برای شبیه‌سازی رفتار انسانی فعال کنید

تنظیم Selenium (اتوماسیون مرورگر)

Selenium یک مرورگر واقعی را کنترل می‌کند، بنابراین بسیاری از حفاظت‌ها را دور می‌زند. مثال تنظیم با پروکسی:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import random

# تنظیم Chrome با پروکسی
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://user:pass@proxy.example.com:8000')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# پنهان کردن WebDriver
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# پارس کردن با تأخیرها
urls = ['https://www.wildberries.ru/catalog/...', ...]

for url in urls:
    driver.get(url)
    # تأخیر تصادفی 3-7 ثانیه
    time.sleep(random.uniform(3, 7))
    
    # اسکرول برای شبیه‌سازی خواندن
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
    time.sleep(random.uniform(1, 3))
    
    # پارس کردن داده‌ها
    # ...

خدمات آماده پارس کردن بازارهای آنلاین

اگر نمی‌خواهید پارسر را به صورت دستی تنظیم کنید، از خدمات تخصصی استفاده کنید:

  • Mpstats.io — تحلیل Wildberries و Ozon، نظارت خودکار بر قیمت‌ها و فروش‌ها
  • SellerFox — نظارت بر رقبا در بازارهای آنلاین، پیگیری موجودی‌ها
  • Moneyplace — پارس کردن آویتو، قرار دادن خودکار آگهی‌ها
  • Parsehub — پارسر بصری برای هر وب‌سایتی، از جمله بازارهای آنلاین

این خدمات پروکسی، محدودیت‌ها و دور زدن حفاظت‌ها را از قبل تنظیم کرده‌اند — شما فقط باید مشخص کنید که چه چیزی را پارس کنید. نقطه منفی — اشتراک ماهیانه از 2000₽.

نظارت بر مسدود شدن‌ها و واکنش خودکار

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

نشانه‌های مسدود شدن که باید پیگیری شوند:

  • HTTP 429 (بیش از حد درخواست) — محدودیت درخواست‌ها تجاوز شده، نیاز به استراحت یا تغییر IP
  • HTTP 403 (ممنوع) — IP مسدود شده، نیاز به چرخش فوری پروکسی
  • HTTP 503 (سرویس در دسترس نیست) — بارگذاری موقت یا حفاظت در برابر DDoS
  • CAPTCHA در پاسخ — اتوماسیون شناسایی شده، نیاز به کاهش فعالیت
  • پاسخ‌های خالی یا هدایت به صفحه اصلی — مسدود شدن نرم
  • افزایش ناگهانی زمان پاسخ — ممکن است محدودیت نرخ در سمت سرور باشد

واکنش خودکار به مسدود شدن‌ها (مثال در Python):

import requests
import time
from datetime import datetime

class SmartParser:
    def __init__(self, proxy_list):
        self.proxy_list = proxy_list
        self.current_proxy_index = 0
        self.request_count = 0
        self.blocked_proxies = set()
        
    def get_next_proxy(self):
        # پروکسی‌های مسدود شده را رد کنید
        while self.current_proxy_index in self.blocked_proxies:
            self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        
        proxy = self.proxy_list[self.current_proxy_index]
        return {'http': proxy, 'https': proxy}
    
    def rotate_proxy(self):
        self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        self.request_count = 0
        
    def make_request(self, url):
        max_retries = 3
        
        for attempt in range(max_retries):
            try:
                proxy = self.get_next_proxy()
                response = requests.get(url, proxies=proxy, timeout=10)
                
                # بررسی مسدود شدن
                if response.status_code == 429:
                    print(f"[{datetime.now()}] محدودیت نرخ! استراحت 60 ثانیه...")
                    time.sleep(60)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 403:
                    print(f"[{datetime.now()}] IP مسدود شده! چرخش پروکسی...")
                    self.blocked_proxies.add(self.current_proxy_index)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 503:
                    print(f"[{datetime.now()}] سرور بارگذاری شده است. استراحت 120 ثانیه...")
                    time.sleep(120)
                    continue
                
                # درخواست موفق
                self.request_count += 1
                
                # چرخش بعد از 200 درخواست
                if self.request_count >= 200:
                    self.rotate_proxy()
                    time.sleep(10)  # استراحت بعد از چرخش
                
                return response
                
            except requests.exceptions.Timeout:
                print(f"[{datetime.now()}] تایم‌اوت. تلاش {attempt + 1}/{max_retries}")
                time.sleep(5)
                
        return None  # همه تلاش‌ها تمام شده‌اند

ثبت و هشدارها: تنظیم اعلان‌ها در زمان رویدادهای بحرانی. به عنوان مثال، پیام را در تلگرام ارسال کنید زمانی که:

  • بیش از 30% پروکسی‌ها از استخر مسدود شده‌اند
  • درصد درخواست‌های موفق به زیر 80% کاهش یافته است
  • پارسر بیش از 30 دقیقه داده‌ای دریافت نکرده است
  • CAPTCHA در پاسخ‌ها شناسایی شده است

معیارها برای نظارت:

  • نرخ موفقیت — درصد درخواست‌های موفق (باید >90% باشد)
  • زمان پاسخ متوسط — زمان متوسط پاسخ (افزایش ممکن است نشانه مشکلات باشد)
  • درخواست‌ها در ساعت — تعداد درخواست‌ها در ساعت برای هر پروکسی
  • سلامت پروکسی — درصد پروکسی‌های فعال در استخر
  • نرخ مسدود شدن — فرکانس مسدود شدن‌ها (باید <5% باشد)

از داشبوردها برای تجسم معیارها استفاده کنید: Grafana، Datadog یا Google Sheets ساده با به‌روزرسانی خودکار از طریق API.

نتیجه‌گیری

مسدود شدن‌ها در هنگام پارس کردن بازارهای آنلاین مانع نیستند، بلکه چالشی هستند که می‌توان با تنظیم صحیح ابزارها حل کرد. نکات کلیدی برای کار پایدار بدون مسدود شدن:

  • از پروکسی‌های مقیم برای Wildberries، Ozon و آویتو استفاده کنید — پروکسی‌های مراکز داده در اینجا کار نمی‌کنند
  • تأخیرهای تصادفی 2-5 ثانیه بین درخواست‌ها را تنظیم کنید
  • IP را بعد از هر 150-300 درخواست یا هر 30-60 دقیقه تغییر دهید
  • از هدرهای HTTP واقعی با User-Agent‌های به‌روز استفاده کنید
  • مسدود شدن‌ها را نظارت کرده و به آن‌ها به صورت خودکار واکنش نشان دهید
  • برای آویتو پیوند جغرافیایی IP به شهر آگهی الزامی است

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

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

```