Обучение AI-моделей требует огромных объемов данных — текстов, изображений, видео, структурированной информации с сайтов. Проблема в том, что при массовом парсинге сайты быстро блокируют IP-адреса, считая активность ботом. В этой статье разберем как правильно организовать сбор данных через прокси, какой тип IP выбрать для разных задач и как настроить инфраструктуру для стабильной работы.
Почему для AI training нужны прокси
Современные языковые модели типа GPT, LLaMA или Claude обучаются на миллиардах токенов текста. Модели компьютерного зрения требуют десятки миллионов изображений. Рекомендательные системы анализируют поведение пользователей на тысячах сайтов. Все эти данные нужно где-то получить.
Основная проблема — сайты активно защищаются от массового парсинга. Если вы отправляете 100+ запросов в минуту с одного IP, вас заблокируют через 5-10 минут. Причины блокировок:
- Rate limiting: ограничение количества запросов с одного IP (обычно 10-60 запросов в минуту)
- Антибот-системы: Cloudflare, Akamai, PerimeterX анализируют поведение и блокируют подозрительную активность
- Географические ограничения: часть контента доступна только из определенных стран
- Защита от конкурентов: маркетплейсы и агрегаторы блокируют массовый сбор цен и товаров
Прокси решают эту проблему, распределяя запросы через тысячи разных IP-адресов. Вместо 1000 запросов с одного IP вы делаете по 1-2 запроса с каждого из 500-1000 разных адресов — это выглядит как активность обычных пользователей.
Какой тип прокси выбрать для сбора данных
Для AI training используют три типа прокси, каждый со своими преимуществами и ограничениями. Выбор зависит от источника данных, объемов и бюджета проекта.
| Тип прокси | Скорость | Доверие сайтов | Стоимость | Когда использовать |
|---|---|---|---|---|
| Datacenter | 100-1000 Мбит/с | Низкое | $0.5-2/IP | Открытые API, простые сайты без защиты |
| Residential | 10-50 Мбит/с | Высокое | $5-15/ГБ | Соцсети, сайты с Cloudflare, e-commerce |
| Mobile | 5-30 Мбит/с | Очень высокое | $10-30/ГБ | Мобильные приложения, строгая защита |
Datacenter прокси: скорость для больших объемов
Прокси дата-центров — это IP-адреса серверов в облачных провайдерах (AWS, Google Cloud, Hetzner). Главное преимущество — скорость и низкая стоимость. Один datacenter IP может обрабатывать сотни запросов в секунду.
Подходят для сбора данных с источников, которые не используют агрессивную защиту: открытые API (GitHub, Wikipedia, Stack Overflow), государственные базы данных, новостные сайты без Cloudflare, научные публикации. Если сайт отдает данные без JavaScript-рендеринга и не проверяет fingerprint браузера — datacenter справятся.
Недостаток — многие сайты ведут blacklist IP дата-центров. Instagram, Facebook, Google Search, крупные маркетплейсы блокируют datacenter IP практически сразу. Для таких источников нужны residential.
Residential прокси: обход любой защиты
Резидентные прокси используют IP-адреса реальных домашних пользователей. Для сайта такой запрос выглядит как обычный посетитель из дома. Это позволяет обходить Cloudflare, Akamai, собирать данные с соцсетей и защищенных платформ.
Residential необходимы для: Instagram, Facebook, Twitter/X (сбор постов, комментариев, профилей), Google Search (парсинг результатов поиска для NLP-моделей), маркетплейсов (Amazon, eBay, Wildberries — товары, отзывы, цены), сайтов с geo-ограничениями (контент доступен только из определенных стран).
Стоимость выше — оплата за трафик ($5-15 за ГБ). Для экономии используйте residential только для критичных источников, а простые сайты парсите через datacenter.
Mobile прокси: для мобильных приложений
Мобильные прокси используют IP мобильных операторов (4G/5G). Нужны редко — в основном для сбора данных из мобильных приложений (TikTok, Instagram app, мобильные игры) или когда сайт различает мобильный и десктопный трафик.
Преимущество мобильных IP — операторы используют CGNAT (один IP на сотни пользователей), поэтому блокировать такие адреса невыгодно. Но для большинства задач AI training достаточно residential.
Типы источников данных и требования к прокси
Разные типы данных требуют разного подхода к прокси. Рассмотрим популярные источники для обучения AI-моделей.
Текстовые данные для NLP-моделей
Для обучения языковых моделей собирают тексты с новостных сайтов, форумов, блогов, социальных сетей, Wikipedia и специализированных ресурсов. Объемы — десятки терабайт текста.
Рекомендация по прокси: Новостные сайты и блоги — datacenter (скорость важнее). Форумы типа Reddit, Quora — residential (есть rate limiting). Twitter, Facebook, Instagram — только residential с ротацией каждые 5-10 минут.
Особенность текстового парсинга — нужно сохранять структуру (заголовки, параграфы, метаданные). Используйте headless-браузеры (Puppeteer, Playwright) для JavaScript-сайтов или простые HTTP-клиенты (requests, axios) для статичных страниц.
Изображения для компьютерного зрения
Обучение моделей распознавания требует миллионов изображений с разметкой. Источники: Google Images, Pinterest, Instagram, специализированные фотостоки, e-commerce сайты (фото товаров).
Проблема — изображения весят много (средний размер 200-500 КБ), поэтому трафик расходуется быстро. При использовании residential прокси (оплата за ГБ) это критично. Стратегия оптимизации: сначала собирайте URL изображений через residential, затем скачивайте сами файлы через datacenter или напрямую (если CDN не проверяет referrer).
Структурированные данные с e-commerce
Данные о товарах, ценах, отзывах используют для обучения рекомендательных систем и моделей ценообразования. Источники: Amazon, eBay, Wildberries, Ozon, AliExpress.
Все крупные маркетплейсы используют Cloudflare или собственные антибот-системы. Обязательно нужны residential прокси с ротацией. Дополнительно важен правильный fingerprint браузера — используйте инструменты типа puppeteer-extra-plugin-stealth для маскировки автоматизации.
Видео и аудио данные
YouTube, TikTok, подкаст-платформы — источники для обучения моделей распознавания речи и видео. Проблема — огромный трафик (одно видео = сотни МБ). Для таких задач residential прокси экономически невыгодны.
Решение: используйте residential только для получения метаданных и ссылок на видео, а скачивание делайте через datacenter или специальные инструменты типа yt-dlp (они умеют обходить ограничения YouTube без прокси).
Стратегии ротации IP для разных объемов
Ротация IP — ключевой момент для стабильного парсинга. Неправильная настройка приведет либо к блокировкам, либо к переплате за трафик.
Ротация по запросу (rotating proxies)
Каждый запрос идет через новый IP. Подходит для массового парсинга разных сайтов, когда не нужно сохранять сессию. Например, сбор текстов с 10000 разных новостных сайтов — каждый сайт видит только 1-2 запроса с одного IP.
import requests
# Rotating proxy - каждый запрос новый 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)
Преимущество — максимальная защита от блокировок. Недостаток — невозможно работать с сайтами, требующими авторизации или сохранения cookies.
Ротация по времени (sticky sessions)
IP сохраняется на 5-30 минут, затем меняется. Подходит для парсинга одного сайта с пагинацией, когда нужно пройти по страницам 1, 2, 3... с сохранением сессии.
import requests
import time
# Sticky session - 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) # задержка между запросами
Настраивайте время сессии в зависимости от rate limit сайта. Если лимит 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-блокировок, но современные сайты анализируют десятки параметров для определения ботов. Даже с residential IP вас могут заблокировать, если fingerprint браузера выдает автоматизацию.
Что проверяют антибот-системы
- User-Agent: должен соответствовать реальному браузеру (Chrome, Firefox), не содержать слова "headless" или "bot"
- Headers: набор заголовков должен быть типичным для браузера (Accept, Accept-Language, Accept-Encoding, Referer)
- TLS fingerprint: параметры SSL-соединения различаются у браузеров и скриптов
- 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) не могут его пройти. Решения:
- Headless-браузер: Puppeteer/Playwright с плагином stealth проходят большинство челленджей
- Готовые решения: библиотеки типа cloudscraper (Python) или puppeteer-extra-plugin-recaptcha
- Сервисы обхода: специализированные API (FlareSolverr, Anti-Captcha) решают челленджи за вас
Важно: даже с правильным fingerprint делайте паузы между запросами. Отправка 100 запросов в секунду с идеальным браузерным fingerprint все равно выглядит подозрительно. Оптимальная скорость — 10-30 запросов в минуту с одного IP.
Архитектура инфраструктуры для сбора данных
При сборе данных для AI training в промышленных масштабах нужна продуманная архитектура. Простой скрипт на одном сервере не справится с парсингом терабайтов данных.
Компоненты системы сбора
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%, скорость упала в 2 раза).
Пример архитектуры на 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 (headless-браузер) или переключитесь на 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 training — дорогое удовольствие. При объемах в терабайты трафика расходы на прокси могут достигать десятков тысяч долларов в месяц. Рассмотрим как оптимизировать затраты без потери качества.
Комбинируйте типы прокси
Не используйте residential для всех задач. Разделите источники на три категории:
- Без защиты: datacenter прокси ($0.5-2/IP) — открытые API, простые сайты, государственные базы
- Средняя защита: residential rotating ($5-10/ГБ) — новостные сайты с Cloudflare, форумы
- Высокая защита: residential sticky sessions ($10-15/ГБ) — соцсети, маркетплейсы
Пример: вы парсите 100 новостных сайтов. 70 из них работают без Cloudflare — используйте datacenter. 30 с защитой — residential. Экономия составит 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
Оптимизируйте трафик
При использовании residential прокси (оплата за ГБ) критично снижать объем трафика:
- Отключайте загрузку изображений, CSS, шрифтов если они не нужны (в Puppeteer: page.setRequestInterception)
- Используйте compression (gzip, brotli) — большинство прокси поддерживают
- Парсите только нужные элементы — не скачивайте всю страницу если нужен один блок
- Для API используйте JSON вместо HTML (в 5-10 раз меньше трафика)
Распределяйте нагрузку по времени
Многие сайты имеют разную нагрузку в течение суток. Парсите в ночные часы (по времени сервера сайта) — меньше вероятность попасть под rate limiting. Также учитывайте выходные дни — в субботу-воскресенье защита может быть слабее.
Мониторьте метрики
Отслеживайте ключевые показатели для оптимизации:
| Метрика | Норма | Что делать при отклонении |
|---|---|---|
| Success rate | >90% | Увеличить задержки, сменить тип прокси |
| Средняя скорость | 50-200 req/min на воркер | Добавить воркеров или прокси |
| Стоимость за 1000 записей | $0.5-5 | Оптимизировать трафик, использовать datacenter |
| Процент дубликатов | <5% | Улучшить дедупликацию, проверить логику краулинга |
Заключение
Сбор данных для обучения AI-моделей — это комплексная задача, требующая правильного выбора прокси, настройки ротации, обхода защит и оптимизации затрат. Ключевые моменты:
- Для простых источников (API, сайты без защиты) используйте datacenter прокси — они быстрые и дешевые
- Для защищенных платформ (соцсети, маркетплейсы, сайты с Cloudflare) обязательны residential прокси
- Настраивайте ротацию в зависимости от задачи: по запросу для массового парсинга разных сайтов, sticky sessions для работы с одним сайтом
- Используйте headless-браузеры с плагинами маскировки для обхода антибот-систем
- Стройте масштабируемую архитектуру с очередями задач и параллельными воркерами
- Оптимизируйте расходы: комбинируйте типы прокси, кэшируйте запросы, снижайте трафик
При правильной настройке вы сможете собирать терабайты данных стабильно и экономично. Начните с небольшого пилотного проекта на 10-20 источниках, отладьте процесс, затем масштабируйте до промышленных объемов.
Если вы планируете собирать данные с защищенных платформ (социальные сети, e-commerce, сайты с антибот-системами), рекомендуем использовать резидентные прокси — они обеспечивают высокий уровень доверия и минимальный процент блокировок. Для простых источников и API достаточно прокси дата-центров, которые дают максимальную скорость при низкой стоимости.