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

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

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

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

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

چرا برای آموزش AI به پروکسی نیاز داریم

مدل‌های زبانی مدرن مانند GPT، LLaMA یا Claude بر روی میلیاردها توکن متن آموزش می‌بینند. مدل‌های بینایی کامپیوتری به ده‌ها میلیون تصویر نیاز دارند. سیستم‌های توصیه‌گر رفتار کاربران را در هزاران سایت تحلیل می‌کنند. همه این داده‌ها باید از جایی به دست آید.

مشکل اصلی این است که سایت‌ها به شدت در برابر پارسینگ انبوه محافظت می‌کنند. اگر شما بیش از 100 درخواست در دقیقه از یک IP ارسال کنید، طی 5-10 دقیقه مسدود خواهید شد. دلایل مسدودسازی عبارتند از:

  • محدودیت نرخ: محدودیت تعداد درخواست‌ها از یک IP (معمولاً 10-60 درخواست در دقیقه)
  • سیستم‌های ضد ربات: Cloudflare، Akamai، PerimeterX رفتار را تحلیل کرده و فعالیت مشکوک را مسدود می‌کنند
  • محدودیت‌های جغرافیایی: بخشی از محتوا فقط از کشورهای خاص قابل دسترسی است
  • محافظت در برابر رقبا: بازارها و تجمیع‌کننده‌ها جمع‌آوری انبوه قیمت‌ها و کالاها را مسدود می‌کنند

پروکسی‌ها این مشکل را با توزیع درخواست‌ها از طریق هزاران IP مختلف حل می‌کنند. به جای 1000 درخواست از یک IP، شما 1-2 درخواست از هر یک از 500-1000 آدرس مختلف ارسال می‌کنید — این به عنوان فعالیت کاربران عادی به نظر می‌رسد.

چه نوع پروکسی برای جمع‌آوری داده‌ها انتخاب کنیم

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

نوع پروکسی سرعت اعتماد سایت‌ها هزینه کی زمانی استفاده کنیم
پروکسی دیتاسنتر 100-1000 مگابیت/ثانیه پایین $0.5-2/IP API‌های باز، سایت‌های ساده بدون حفاظت
پروکسی مسکونی 10-50 مگابیت/ثانیه بالا $5-15/گیگابایت شبکه‌های اجتماعی، سایت‌های با Cloudflare، تجارت الکترونیک
پروکسی موبایل 5-30 مگابیت/ثانیه بسیار بالا $10-30/گیگابایت برنامه‌های موبایل، حفاظت سخت

پروکسی دیتاسنتر: سرعت برای حجم‌های بالا

پروکسی دیتاسنتر — این IP-addressها سرورهایی در ارائه‌دهندگان ابری (AWS، Google Cloud، Hetzner) هستند. مزیت اصلی — سرعت و هزینه پایین. یک IP دیتاسنتر می‌تواند صدها درخواست در ثانیه را پردازش کند.

این پروکسی‌ها برای جمع‌آوری داده‌ها از منابعی که از حفاظت تهاجمی استفاده نمی‌کنند مناسب هستند: API‌های باز (GitHub، Wikipedia، Stack Overflow)، پایگاه‌های داده دولتی، سایت‌های خبری بدون Cloudflare، نشریات علمی. اگر سایت داده‌ها را بدون رندرینگ JavaScript ارائه دهد و fingerprint مرورگر را بررسی نکند — دیتاسنترها کار خواهند کرد.

معایب — بسیاری از سایت‌ها IP‌های دیتاسنتر را در لیست سیاه قرار می‌دهند. Instagram، Facebook، Google Search و بازارهای بزرگ تقریباً بلافاصله IP‌های دیتاسنتر را مسدود می‌کنند. برای چنین منابعی به پروکسی‌های مسکونی نیاز دارید.

پروکسی مسکونی: دور زدن هر نوع حفاظتی

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

پروکسی‌های مسکونی برای: Instagram، Facebook، Twitter/X (جمع‌آوری پست‌ها، نظرات، پروفایل‌ها)، Google Search (پارسینگ نتایج جستجو برای مدل‌های NLP)، بازارها (Amazon، eBay، Wildberries — کالاها، نظرات، قیمت‌ها)، سایت‌های با محدودیت‌های جغرافیایی (محتوا فقط از کشورهای خاص قابل دسترسی است) ضروری هستند.

هزینه بالاتر است — پرداخت برای ترافیک ($5-15 برای هر گیگابایت). برای صرفه‌جویی از پروکسی‌های مسکونی فقط برای منابع حیاتی استفاده کنید و سایت‌های ساده را از طریق دیتاسنتر پارس کنید.

پروکسی موبایل: برای برنامه‌های موبایل

پروکسی‌های موبایل از IP‌های اپراتورهای موبایل (4G/5G) استفاده می‌کنند. به ندرت نیاز است — عمدتاً برای جمع‌آوری داده‌ها از برنامه‌های موبایل (TikTok، برنامه Instagram، بازی‌های موبایل) یا زمانی که سایت ترافیک موبایل و دسکتاپ را تشخیص می‌دهد.

مزیت IP‌های موبایل — اپراتورها از CGNAT استفاده می‌کنند (یک IP برای صدها کاربر)، بنابراین مسدود کردن چنین آدرس‌هایی به صرفه نیست. اما برای اکثر وظایف آموزش AI، پروکسی‌های مسکونی کافی هستند.

انواع منابع داده و الزامات پروکسی

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

داده‌های متنی برای مدل‌های NLP

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

توصیه در مورد پروکسی: سایت‌های خبری و وبلاگ‌ها — دیتاسنتر (سرعت مهم‌تر است). فروم‌هایی مانند Reddit، Quora — مسکونی (محدودیت نرخ وجود دارد). Twitter، Facebook، Instagram — فقط مسکونی با چرخش هر 5-10 دقیقه.

ویژگی پارسینگ متنی — نیاز به حفظ ساختار (عنوان‌ها، پاراگراف‌ها، متاداده‌ها). از مرورگرهای بدون سر (headless) (Puppeteer، Playwright) برای سایت‌های JavaScript یا کلاینت‌های HTTP ساده (requests، axios) برای صفحات ایستا استفاده کنید.

تصاویر برای بینایی کامپیوتری

آموزش مدل‌های شناسایی نیاز به میلیون‌ها تصویر با برچسب دارد. منابع: Google Images، Pinterest، Instagram، منابع عکس تخصصی، سایت‌های تجارت الکترونیک (عکس‌های کالاها).

مشکل — تصاویر حجم زیادی دارند (اندازه متوسط 200-500 کیلوبایت)، بنابراین ترافیک به سرعت مصرف می‌شود. هنگام استفاده از پروکسی‌های مسکونی (پرداخت برای گیگابایت) این موضوع بحرانی است. استراتژی بهینه‌سازی: ابتدا URL تصاویر را از طریق مسکونی جمع‌آوری کنید، سپس فایل‌های خود را از طریق دیتاسنتر یا به‌طور مستقیم دانلود کنید (اگر CDN بررسی referrer نکند).

داده‌های ساختاریافته از تجارت الکترونیک

داده‌های مربوط به کالاها، قیمت‌ها، نظرات برای آموزش سیستم‌های توصیه‌گر و مدل‌های قیمت‌گذاری استفاده می‌شوند. منابع: Amazon، eBay، Wildberries، Ozon، AliExpress.

تمام بازارهای بزرگ از Cloudflare یا سیستم‌های ضد ربات خود استفاده می‌کنند. پروکسی‌های مسکونی با چرخش ضروری هستند. علاوه بر این، fingerprint مرورگر صحیح بسیار مهم است — از ابزارهایی مانند puppeteer-extra-plugin-stealth برای مخفی‌سازی اتوماسیون استفاده کنید.

داده‌های ویدیو و صوتی

YouTube، TikTok، پلتفرم‌های پادکست — منابعی برای آموزش مدل‌های شناسایی گفتار و ویدیو. مشکل — ترافیک بسیار زیاد (یک ویدیو = صدها مگابایت). برای چنین وظایفی پروکسی‌های مسکونی از نظر اقتصادی به صرفه نیستند.

راه حل: از پروکسی‌های مسکونی فقط برای دریافت متاداده و لینک‌های ویدیو استفاده کنید، و دانلود را از طریق دیتاسنتر یا ابزارهای خاصی مانند yt-dlp انجام دهید (این ابزارها می‌توانند محدودیت‌های YouTube را بدون پروکسی دور بزنند).

استراتژی‌های چرخش IP برای حجم‌های مختلف

چرخش IP — نکته کلیدی برای پارسینگ پایدار است. تنظیم نادرست منجر به مسدودسازی یا پرداخت اضافی برای ترافیک می‌شود.

چرخش بر اساس درخواست (پروکسی‌های چرخان)

هر درخواست از طریق یک IP جدید می‌رود. این روش برای پارسینگ انبوه سایت‌های مختلف مناسب است، زمانی که نیازی به حفظ جلسه نیست. به عنوان مثال، جمع‌آوری متن‌ها از 10000 سایت خبری مختلف — هر سایت فقط 1-2 درخواست از یک IP می‌بیند.

import requests

# پروکسی چرخان - هر درخواست IP جدید
proxies = {
    'http': 'http://username:password@rotating.proxycove.com:12345',
    'https': 'http://username:password@rotating.proxycove.com:12345'
}

urls = ['https://site1.com', 'https://site2.com', ...]
for url in urls:
    response = requests.get(url, proxies=proxies)
    # هر درخواست از یک IP جدید می‌آید
    parse_data(response.text)

مزیت — حداکثر حفاظت در برابر مسدودسازی. معایب — نمی‌توان با سایت‌هایی که نیاز به احراز هویت یا حفظ کوکی‌ها دارند کار کرد.

چرخش بر اساس زمان (جلسات چسبنده)

IP به مدت 5-30 دقیقه حفظ می‌شود و سپس تغییر می‌کند. این روش برای پارسینگ یک سایت با صفحه‌بندی مناسب است، زمانی که نیاز به عبور از صفحات 1، 2، 3... با حفظ جلسه وجود دارد.

import requests
import time

# جلسه چسبنده - IP به مدت 10 دقیقه حفظ می‌شود
session_id = generate_random_string()  # ID جلسه منحصر به فرد
proxies = {
    'http': f'http://username-session-{session_id}:password@sticky.proxycove.com:12345'
}

# تمام درخواست‌ها در مدت 10 دقیقه از یک IP می‌آیند
for page in range(1, 100):
    url = f'https://site.com/catalog?page={page}'
    response = requests.get(url, proxies=proxies)
    parse_page(response.text)
    time.sleep(2)  # تأخیر بین درخواست‌ها

زمان جلسه را بسته به محدودیت نرخ سایت تنظیم کنید. اگر محدودیت 60 درخواست در دقیقه است، جلسه را 1-2 دقیقه تنظیم کنید و بیش از 50 درخواست ارسال نکنید.

استخر IP‌های ثابت

شما لیستی از 100-1000 IP دریافت می‌کنید و خودتان توزیع درخواست‌ها را مدیریت می‌کنید. این روش برای سناریوهای پیچیده مناسب است، زمانی که کنترل کامل نیاز است: پارسینگ موازی بخش‌های مختلف سایت، تعادل بار، منطق چرخش سفارشی.

import requests
from itertools import cycle

# استخر 500 IP ثابت
ip_pool = [
    'http://user:pass@ip1.proxycove.com:12345',
    'http://user:pass@ip2.proxycove.com:12345',
    # ... 500 آدرس
]

proxy_cycle = cycle(ip_pool)

for url in urls:
    proxy = next(proxy_cycle)  # IP بعدی را از استخر می‌گیریم
    response = requests.get(url, proxies={'http': proxy, 'https': proxy})
    parse_data(response.text)

این روش حداکثر انعطاف‌پذیری را فراهم می‌کند، اما به کد بیشتری برای مدیریت خطاها نیاز دارد (اگر IP مسدود شد، باید آن را از استخر حذف کنید).

دور زدن سیستم‌های ضد ربات در هنگام پارسینگ

پروکسی‌ها مشکل مسدودسازی IP را حل می‌کنند، اما سایت‌های مدرن ده‌ها پارامتر را برای شناسایی ربات‌ها تحلیل می‌کنند. حتی با IP‌های مسکونی نیز ممکن است مسدود شوید، اگر fingerprint مرورگر اتوماسیون را نشان دهد.

چه چیزهایی را سیستم‌های ضد ربات بررسی می‌کنند

  • User-Agent: باید با مرورگر واقعی (Chrome، Firefox) مطابقت داشته باشد و نباید شامل کلمات "headless" یا "bot" باشد
  • Headers: مجموعه‌ای از هدرها باید برای مرورگر معمولی (Accept، Accept-Language، Accept-Encoding، Referer) متداول باشد
  • TLS fingerprint: پارامترهای SSL-connection در مرورگرها و اسکریپت‌ها متفاوت است
  • JavaScript fingerprint: WebGL، Canvas، AudioContext، فونت‌ها، پلاگین‌ها، وضوح صفحه
  • رفتار: حرکات ماوس، سرعت اسکرول، کلیک‌ها (برای سایت‌های با رندرینگ JavaScript)

ابزارها برای مخفی‌سازی اتوماسیون

برای دور زدن حفاظت پیشرفته از مرورگرهای بدون سر (headless) با پلاگین‌های مخفی‌سازی استفاده کنید:

// Puppeteer با پلاگین stealth
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

const browser = await puppeteer.launch({
    headless: true,
    args: [
        '--proxy-server=http://username:password@residential.proxycove.com:12345',
        '--disable-blink-features=AutomationControlled'
    ]
});

const page = await browser.newPage();
// تنظیم viewport واقعی
await page.setViewport({ width: 1920, height: 1080 });

// افزودن تأخیرهای تصادفی
await page.goto('https://protected-site.com');
await page.waitForTimeout(2000 + Math.random() * 3000);

const data = await page.evaluate(() => {
    return document.querySelector('.data').innerText;
});

await browser.close();

برای Python از Playwright با تنظیمات مشابه یا Selenium با undetected-chromedriver — کتابخانه‌ای که به‌طور خودکار ChromeDriver را برای دور زدن شناسایی پچ می‌کند، استفاده کنید.

دور زدن Cloudflare و دیگر WAF

Cloudflare از چالش JavaScript برای بررسی مرورگر استفاده می‌کند. کلاینت‌های HTTP ساده (requests، axios) نمی‌توانند از آن عبور کنند. راه‌حل‌ها:

  • مرورگر بدون سر: Puppeteer/Playwright با پلاگین stealth از بیشتر چالش‌ها عبور می‌کنند
  • راه‌حل‌های آماده: کتابخانه‌هایی مانند cloudscraper (Python) یا puppeteer-extra-plugin-recaptcha
  • خدمات دور زدن: API‌های تخصصی (FlareSolverr، Anti-Captcha) چالش‌ها را برای شما حل می‌کنند

مهم است: حتی با fingerprint صحیح، بین درخواست‌ها وقفه ایجاد کنید. ارسال 100 درخواست در ثانیه با fingerprint مرورگر ایده‌آل همچنان مشکوک به نظر می‌رسد. سرعت بهینه — 10-30 درخواست در دقیقه از یک IP.

معماری زیرساخت برای جمع‌آوری داده‌ها

هنگام جمع‌آوری داده‌ها برای آموزش AI در مقیاس صنعتی، به معماری مدبرانه‌ای نیاز است. یک اسکریپت ساده در یک سرور نمی‌تواند با پارسینگ ترابایت داده‌ها مقابله کند.

اجزای سیستم جمع‌آوری

1. صف وظایف (Task Queue)

لیست URLها برای پارسینگ را ذخیره می‌کند. از Redis، RabbitMQ یا AWS SQS استفاده کنید. این امکان را فراهم می‌کند که وظایف را بین کارگران توزیع کرده و وظایف افتاده را دوباره ارسال کنید.

2. کارگران (Workers)

فرآیندهایی که وظایف را از صف می‌گیرند و پارسینگ را انجام می‌دهند. 10-100 کارگر را به‌طور موازی در سرورهای مختلف اجرا کنید. هر کارگر از پروکسی یا استخر پروکسی خود استفاده می‌کند.

3. ذخیره‌سازی داده‌ها (Storage)

جایی که داده‌های جمع‌آوری شده ذخیره می‌شوند. برای متن‌ها — S3/MinIO (ذخیره‌سازی شیء). برای داده‌های ساختاریافته — PostgreSQL یا MongoDB. برای حجم‌های بزرگ — data lake (AWS S3 + Athena، Google Cloud Storage).

4. نظارت (Monitoring)

پیگیری سرعت پارسینگ، درصد خطاها، مصرف ترافیک. از Grafana + Prometheus یا راه‌حل‌های آماده مانند Datadog استفاده کنید. هشدارها را برای معیارهای بحرانی تنظیم کنید (درصد خطاها >10%، سرعت به نصف کاهش یافته است).

مثال معماری با Python

# worker.py - فرآیند پارسینگ
import redis
import requests
import json
from datetime import datetime

# اتصال به Redis (صف وظایف)
queue = redis.Redis(host='redis-server', port=6379)
# استخر پروکسی
proxies_pool = load_proxies_from_config()

while True:
    # گرفتن وظیفه از صف
    task = queue.blpop('parsing_queue', timeout=5)
    if not task:
        continue
    
    url = task[1].decode('utf-8')
    proxy = get_next_proxy(proxies_pool)
    
    try:
        response = requests.get(
            url, 
            proxies={'http': proxy, 'https': proxy},
            timeout=30,
            headers={'User-Agent': get_random_user_agent()}
        )
        
        # پارس کردن داده‌ها
        data = parse_html(response.text)
        
        # ذخیره در S3
        save_to_s3(data, f'data/{datetime.now().isoformat()}/{hash(url)}.json')
        
        # ثبت موفقیت
        log_success(url, proxy)
        
    except Exception as e:
        # در صورت خطا، وظیفه را به صف برمی‌گردانیم
        queue.rpush('parsing_queue', url)
        log_error(url, proxy, str(e))
        mark_proxy_as_failed(proxy)

چنین معماری به شما امکان مقیاس‌پذیری افقی را می‌دهد — به سادگی سرورهای جدیدی با کارگران اضافه کنید. اگر یک کارگر سقوط کند، بقیه به کار خود ادامه می‌دهند.

ابزارها برای اتوماسیون جمع‌آوری

برای پارسینگ صنعتی از فریم‌ورک‌های تخصصی استفاده می‌شود که وظایف معمولی را به‌طور پیش‌فرض حل می‌کنند.

Scrapy — فریم‌ورک برای Python

Scrapy — محبوب‌ترین ابزار برای وب‌اسکرایپینگ در Python است. به‌طور پیش‌فرض از: پارسینگ موازی (صدها درخواست به‌طور همزمان)، retry خودکار در صورت خطا، middleware برای چرخش پروکسی و User-Agent، صادرات به JSON، CSV، XML و پایگاه‌های داده پشتیبانی می‌کند.

# settings.py - تنظیمات Scrapy با پروکسی
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.proxycove.com:12345',
    'http://user:pass@proxy2.proxycove.com:12345',
    # ... لیست پروکسی
]

DOWNLOADER_MIDDLEWARES = {
    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

# همزمانی
CONCURRENT_REQUESTS = 100
DOWNLOAD_DELAY = 0.5  # تأخیر بین درخواست‌ها

Scrapy برای سایت‌های ایستا (HTML بدون JavaScript) مناسب است. برای سایت‌های دینامیک از Scrapy + Splash (مرورگر بدون سر) استفاده کنید یا به Playwright سوئیچ کنید.

Crawlee — فریم‌ورک برای Node.js

Crawlee (قبلاً Apify SDK) — معادل Scrapy برای JavaScript است. مزیت — کار نیتیو با Puppeteer و Playwright، چرخش پروکسی داخلی، مدیریت خودکار صف، سرعت پارسینگ تطبیقی (در صورت خطا کاهش می‌یابد).

import { PlaywrightCrawler, ProxyConfiguration } from 'crawlee';

const proxyConfiguration = new ProxyConfiguration({
    proxyUrls: [
        'http://user:pass@proxy1.proxycove.com:12345',
        'http://user:pass@proxy2.proxycove.com:12345',
    ],
});

const crawler = new PlaywrightCrawler({
    proxyConfiguration,
    maxConcurrency: 50,
    requestHandler: async ({ page, request }) => {
        await page.waitForSelector('.data');
        const data = await page.$$eval('.item', items => 
            items.map(item => ({
                title: item.querySelector('h2').innerText,
                price: item.querySelector('.price').innerText
            }))
        );
        await saveData(data);
    },
});

await crawler.run(['https://site.com/catalog']);

Apache Nutch — برای کرولینگ مقیاس بزرگ

اگر نیاز به جمع‌آوری داده‌ها از کل اینترنت (مانند موتورهای جستجو) دارید، از Apache Nutch استفاده کنید. این یک کرولر توزیع‌شده است که بر روی Hadoop کار می‌کند. می‌تواند پتابایت‌ها داده را پردازش کند، به‌طور خودکار صفحات جدید را از طریق لینک‌ها شناسایی می‌کند و از سیاست کرولینگ (robots.txt، sitemap.xml) پشتیبانی می‌کند.

Nutch در تنظیمات پیچیده‌تر است، اما برای جمع‌آوری مجموعه‌های داده مشابه Common Crawl ضروری است. برای کار با پروکسی از پلاگین proxy-rotator استفاده کنید.

بهینه‌سازی سرعت و هزینه

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

ترکیب انواع پروکسی

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

  • بدون حفاظت: پروکسی دیتاسنتر ($0.5-2/IP) — API‌های باز، سایت‌های ساده، پایگاه‌های داده دولتی
  • حفاظت متوسط: پروکسی مسکونی چرخان ($5-10/گیگابایت) — سایت‌های خبری با Cloudflare، فروم‌ها
  • حفاظت بالا: پروکسی مسکونی با جلسات چسبنده ($10-15/گیگابایت) — شبکه‌های اجتماعی، بازارها

مثال: شما 100 سایت خبری را پارس می‌کنید. 70 مورد از آن‌ها بدون Cloudflare کار می‌کنند — از دیتاسنتر استفاده کنید. 30 مورد با حفاظت — مسکونی. صرفه‌جویی 60-70% در بودجه پروکسی خواهید داشت.

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

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

import hashlib
import redis

cache = redis.Redis(host='localhost', port=6379)

def fetch_with_cache(url, proxies):
    # بررسی کش
    cache_key = hashlib.md5(url.encode()).hexdigest()
    cached = cache.get(cache_key)
    
    if cached:
        return cached.decode('utf-8')
    
    # اگر در کش نیست - درخواست می‌زنیم
    response = requests.get(url, proxies=proxies)
    html = response.text
    
    # ذخیره در کش به مدت 24 ساعت
    cache.setex(cache_key, 86400, html)
    return html

بهینه‌سازی ترافیک

هنگام استفاده از پروکسی‌های مسکونی (پرداخت برای گیگابایت) کاهش حجم ترافیک بسیار مهم است:

  • بارگذاری تصاویر، CSS، فونت‌ها را اگر نیاز نیستند غیرفعال کنید (در Puppeteer: page.setRequestInterception)
  • از فشرده‌سازی (gzip، brotli) استفاده کنید — اکثر پروکسی‌ها از آن پشتیبانی می‌کنند
  • فقط عناصر مورد نیاز را پارس کنید — تمام صفحه را دانلود نکنید اگر فقط یک بلوک نیاز دارید
  • برای API از JSON به جای HTML استفاده کنید (5-10 برابر کمتر ترافیک)

توزیع بار به‌طور زمانی

بسیاری از سایت‌ها در طول روز بار متفاوتی دارند. در ساعات شب (بر اساس زمان سرور سایت) پارس کنید — احتمال کمتری دارد که تحت محدودیت نرخ قرار بگیرید. همچنین روزهای تعطیل را در نظر بگیرید — در روزهای شنبه و یکشنبه حفاظت ممکن است ضعیف‌تر باشد.

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

معیارهای کلیدی را برای بهینه‌سازی پیگیری کنید:

معیار نرمال در صورت انحراف چه کار کنیم
نرخ موفقیت >90% افزایش تأخیرها، تغییر نوع پروکسی
سرعت متوسط 50-200 req/min برای هر کارگر اضافه کردن کارگران یا پروکسی‌ها
هزینه برای 1000 رکورد $0.5-5 بهینه‌سازی ترافیک، استفاده از دیتاسنتر
درصد تکراری‌ها <5% بهبود ددوپلیکیشن، بررسی منطق کرولینگ

نتیجه‌گیری

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

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

با تنظیم صحیح می‌توانید ترابایت‌ها داده را به‌طور پایدار و اقتصادی جمع‌آوری کنید. با یک پروژه آزمایشی کوچک در 10-20 منبع شروع کنید، فرآیند را تنظیم کنید و سپس به حجم‌های صنعتی مقیاس دهید.

اگر قصد دارید داده‌ها را از پلتفرم‌های محافظت شده (شبکه‌های اجتماعی، تجارت الکترونیک، سایت‌های با سیستم‌های ضد ربات) جمع‌آوری کنید، پیشنهاد می‌کنیم از پروکسی‌های مسکونی استفاده کنید — آن‌ها سطح بالایی از اعتماد و حداقل درصد مسدودسازی را فراهم می‌کنند. برای منابع ساده و API، پروکسی‌های دیتاسنتر کافی هستند که حداکثر سرعت را با هزینه پایین ارائه می‌دهند.

```