Настройка прокси в Crawl4AI

Crawl4AI — это мощный open-source инструмент для веб-скрапинга, предназначенный для извлечения чистых данных с веб-страниц, подходящих для обучения ИИ и LLM-моделей. Он быстрый, гибкий и способен обходить базовые защиты сайтов, такие как простые анти-бот системы. Для более сложных защит, включая CAPTCHA, рекомендуется интеграция со сторонними сервисами (см. Часть 4).

Однако при масштабном скрапинге (например, 10 000 страниц) ваш локальный IP-адрес быстро попадёт под блокировку. Чтобы избежать этого и обеспечить непрерывный поток данных для ваших AI-моделей, необходима надёжная прокси-инфраструктура. В этом гайде мы разберём, как выбрать подходящий тип прокси от CyberYozh App для вашей задачи и интегрировать их в Crawl4AI.

🛑 Критически важная информация по протоколам (HTTP vs SOCKS5): Библиотека Playwright (на которой работает Crawl4AI) не поддерживает SOCKS5-прокси с авторизацией (login:password). Так как все прокси в CyberYozh App для безопасности работают только с авторизацией, для работы с Crawl4AI вам необходимо использовать протокол HTTP. Он полностью поддерживает авторизацию и обеспечивает стабильную работу.

Ключевые особенности интеграции: Прокси — отдельный модуль (proxy_module.py) для модульности. Данные хранятся в текстовых файлах (по типу: резидентские, мобильные, датацентр). Переключение типа/протокола — в одной-двух строках в основном скрипте.

Часть 1. Выбор прокси: Какой тип подойдёт для вашего датасета?

Crawl4AI универсален, но эффективность зависит от "топлива" — пула IP-адресов. В CyberYozh App доступны различные типы прокси, каждый оптимизирован для конкретных сценариев скрапинга. Выбор зависит от уровня защиты сайта, объёма данных и необходимости в ротации. Все типы поддерживают как HTTP, так и SOCKS5.

  1. Резидентские Ротационные (Residential Rotating) — Выбор №1 для массового скрапинга
    1. Суть: Пул из миллионов реальных домашних IP-адресов. Ротация автоматически: новый IP по ссылке или по запросу API.
    2. Идеально для Crawl4AI: Большие датасеты с маркетплейсов (Amazon, Wildberries), поисковиков (Google, Yandex).
    3. Почему: Высокий траст, минимизирует блокировки. Поддерживают 3 вида сессий (Случайный IP, Короткая, Длинная до 6 часов).
  2. Резидентские Статические (Residential Static / ISP)
    1. Суть: Фиксированные домашние IP на период аренды.
    2. Идеально для Crawl4AI: Сайты с авторизацией (личные кабинеты).
    3. Почему: Стабильность сессий.
  3. Мобильные выделенные порты (Mobile Dedicated)
    1. Суть: Приватный модем с реальной SIM-картой, выделенный лично под вас.
    2. Идеально для Crawl4AI: Сложные задачи, сайты с жесткой анти-бот защитой, эмуляция поведения реального пользователя мобильного устройства.
    3. Почему: Максимальный траст со стороны сайтов. Рекомендуется для самых тяжелых кейсов.
  4. Мобильные общие прокси (Mobile Shared)
    1. Суть: IP от 4G/5G, shared-канал в приватном режиме.
    2. Идеально для Crawl4AI: Соцсети (Instagram, TikTok) или сайты с защитой (Cloudflare).
    3. Почему: Высокий траст для мобильного трафика.
  5. Датацентровые выделенные прокси (Datacenter)
    1. Суть: Серверные IP, быстрые и дешёвые.
    2. Идеально для Crawl4AI: Открытые источники без защиты.
    3. Почему: Максимальная скорость.

Совет по интеграции: Для смешанного подхода комбинируйте типы.

Часть 2. Подготовка данных и установка

Подготовьте данные из CyberYozh App:

После покупки прокси скопируйте данные:

  • Host (IP): 51.77.190.247
  • Port: 5959
  • Login: user123
  • Password: pass123

Формат строки подключения: Crawl4AI (как и библиотека Playwright, лежащая в его основе) принимает прокси в формате единой строки: http://login:password@ip:port

Пример: http://user123:pass123@51.77.190.247:5959

Управление Резидентскими ротационными прокси

Для Резидентских Ротационных прокси в CyberYozh App доступна гибкая настройка сессии прямо через логин (username). Это критически важно для логики вашего скрапера.

Креды можно сгенерировать в личном кабинете, нажав кнопку “Сгенерировать учетные данные” в карточке пакета. Доступны форматы вывода: IP:PORT:USERNAME:PASSWORD или ссылка для cURL.

Переход к интерфейсу создания конфигураций и параметров подключения (генератор кредов).

Рис. 1. Переход к интерфейсу создания конфигураций и параметров подключения (генератор кредов).

Использование генератора для настройки параметра sid, отвечающего за создание новых уникальных сессий.

Рис. 2. Использование генератора для настройки параметра sid, отвечающего за создание новых уникальных сессий.

Настройка параметров для формирования учетных данных с использованием длинных (Sticky) сессий.

Рис. 3. Настройка параметров для формирования учетных данных с использованием длинных (Sticky) сессий.

Результат работы генератора учётных данных (кредов).

Рис. 4. Результат работы генератора учётных данных (кредов).

Типы сессий и как их прописать:

1. Случайный IP (Random IP) — для каждого запроса новый IP Используйте префикс -res-any. Пример логина: user-res-any Когда нужно: Обычный скрапинг, где не нужно сохранять состояние между страницами.

2. Короткая сессия (до 1 минуты) Позволяет сохранить IP на короткое время (например, пройти капчу и загрузить страницу). Используйте префикс -sid-RANDOMNUMBER.

Формат: user-res-any-sid-47551677 (где 47551677 — любое случайное число, генерируемое вами).

Гео: В коротких сессиях можно выбрать Страну, Регион и Город (пример: -res_sc-us_georgia_macon-sid-54683597).

3. Длинная липкая сессия (до 6 часов) Это Sticky-сессия, которая держит один IP до 6 часов. Идеально для глубокого парсинга одного сайта.

Как получить: Вариант А (Простой): Сгенерировать готовую строку с "Длинной сессией" в генераторе учётных данных (кредов) в личном кабинете. Вариант Б (Продвинутый/API): Необходимо выполнить 2 шага. Сделать запрос cURL с префиксом -resfix- (например, user-resfix-us-nnid-0). В заголовке ответа X-NN-LLS получить токен (например, 9d016e26...). Подставить этот токен вместо 0 в логин: user-resfix-us-nnid-9d016e26....

Управление мобильными прокси в личном кабинете

Работа с мобильными прокси имеет важную особенность: для смены IP используется API-ссылка. Обязательно найдите её в карточке купленного пакета — именно этот URL необходимо вставить в ваш софт или скрипт для настройки автоматической ротации.

Расположение ссылки для автоматической ротации.

Рис. 5. Расположение ссылки для автоматической ротации.

Кроме того, в CyberYozh App предусмотрен ручной режим. Если вам требуется сменить IP-адрес прямо сейчас, не прибегая к скриптам, просто нажмите кнопку смены IP в панели управления — адрес обновится мгновенно.

Кнопка для принудительной ручной смены.

Рис. 6. Кнопка для принудительной ручной смены.

Создайте файлы в директории проекта:

proxies_residential.txt:

user123:pass123@51.77.190.247:5959 Добавьте больше прокси для ротации.

proxies_mobile.txt и proxies_datacenter.txt аналогично. * Формат: login:password@host:port для auth (только с HTTP).

Установка:

pip install crawl4ai playwright
playwright install

Проверьте установку: python -m crawl4ai --version. Используйте venv, если необходимо.

Часть 3. Интеграция прокси в Crawl4AI (Python) как отдельный модуль

Модуль proxy_module.py загружает прокси из файлов, добавляет протокол ("http" или "socks5") и поддерживает ротацию.

Шаг 1. Модуль прокси (proxy_module.py):

import random  
import os  

class ProxyManager:  
    def __init__(self, proxy_type="residential", protocol="http", rotate=True):  
        """  
        Инициализация менеджера прокси.  
        :param proxy_type: Тип ('residential', 'mobile', 'datacenter')  
        :param protocol: Протокол ('http' или 'socks5') — socks5 только без auth!  
        :param rotate: Вкл/выкл ротацию  
        """  
        self.proxy_type = proxy_type.lower()  
        self.protocol = protocol.lower()  
        self.rotate = rotate  
        self.proxies = self._load_proxies()  # Загружаем из файла  
        if self.protocol == "socks5" and self.proxies and '@' in self.proxies[0]:  # Проверка на auth  
            raise ValueError("SOCKS5 не поддерживает аутентификацию в Playwright! Удалите login:password из файла.")  
        self.current_proxy = None  

    def _load_proxies(self):  
        """Загружает прокси из файла."""  
        file_map = {  
            "residential": "proxies_residential.txt",  
            "mobile": "proxies_mobile.txt",  
            "datacenter": "proxies_datacenter.txt"  
        }  
        file_name = file_map.get(self.proxy_type)  
        if not file_name:  
            raise ValueError(f"Неизвестный тип: {self.proxy_type}.")  

        file_path = os.path.join(os.path.dirname(__file__), file_name)  
        if not os.path.exists(file_path):  
            raise FileNotFoundError(f"Файл {file_name} не найден.")  

        with open(file_path, 'r') as f:  
            lines = f.read().strip().splitlines()  
            # Добавляем протокол: protocol://line (line = user:pass@host:port или host:port)  
            proxies = [f"{self.protocol}://{line.strip()}" for line in lines if line.strip()]  

        if not proxies:  
            raise ValueError(f"Файл {file_name} пустой.")  

        return proxies  

    def get_proxy(self):  
        """Возвращает прокси."""  
        if not self.proxies:  
            raise ValueError("Нет прокси!")  
        if self.rotate:  
            self.current_proxy = random.choice(self.proxies)  
        else:  
            self.current_proxy = self.proxies[0]  
        return self.current_proxy  

    def get_proxy_config(self):  
        """Возвращает ProxyConfig для Crawl4AI."""  
        if not self.current_proxy:  
            self.get_proxy()  
        # Разделяем: protocol://user:pass@host:port или protocol://host:port  
        if '@' in self.current_proxy:  
            parts = self.current_proxy.split('@')  
            auth = parts[0].split('//')[1]  # user:pass  
            host_port = parts[1]  # host:port  
            user, password = auth.split(':')  
        else:  
            host_port = self.current_proxy.split('//')[1]  # host:port для no-auth  
            user, password = None, None  
        from crawl4ai.async_configs import ProxyConfig  
        return ProxyConfig(  
            server=f"{self.protocol}://{host_port}",  
            username=user,  
            password=password  
        )  

    def add_proxy(self, proxy_url):  
        self.proxies.append(proxy_url)  

Шаг 2. Скрипт скрапера (scraper.py):

import asyncio  
from crawl4ai import AsyncWebCrawler  
from crawl4ai.async_configs import BrowserConfig  
from proxy_module import ProxyManager  

# Переключение типа (residential, mobile, datacenter)  
PROXY_TYPE = "residential"  
# Переключение протокола (http или socks5 — socks5 только без auth!)  
PROXY_PROTOCOL = "http"  # Рекомендуется для auth; для SOCKS5 уберите login:password из файла  

# Инициализируем менеджер  
proxy_manager = ProxyManager(proxy_type=PROXY_TYPE, protocol=PROXY_PROTOCOL, rotate=True)  

async def main():  
    try:  
        proxy_config = proxy_manager.get_proxy_config()  
        browser_config = BrowserConfig(proxy_config=proxy_config)  
        async with AsyncWebCrawler(verbose=True, config=browser_config) as crawler:  
            current_proxy = proxy_manager.get_proxy()  
            print(f"🚀 Запуск через {PROXY_PROTOCOL.upper()} прокси...")  
            print(f"Прокси: {current_proxy}")  

            result = await crawler.arun(  
                url="https://ipinfo.io/json",  
                bypass_cache=True  
            )  

            if result.success:  
                print("\n✅ Успешно! Ответ:")  
                print(result.markdown)  
            else:  
                print(f"\n❌ Ошибка: {result.error_message}")  
    except Exception as e:  
        print(f"❌ Ошибка: {str(e)}")  

if __name__ == "__main__":  
    asyncio.run(main())  

Шаг 3. Запуск:

python scraper.py
  • Для SOCKS5: Установите PROXY_PROTOCOL = "socks5" и уберите auth из файлов (только host:port). Если auth нужен — используйте "http".

Часть 4. Продвинутые сценарии и решение проблем

Автоматическая ротация (для резидентских ротационных и мобильных):

Нет нужды в коде — шлюз CyberYozh App сам ротирует IP. Просто вызывайте crawler.arun в цикле:

for url in urls_list:  
    proxy_config = proxy_manager.get_proxy_config()  # Новый конфиг для ротации  
    browser_config = BrowserConfig(proxy_config=proxy_config)  
    # Переинициализируйте crawler с новым config, если нужно  
    result = await crawler.arun(url=url, bypass_cache=True)  

Ручная ротация для статических (резидентских/датацентр):

Добавьте несколько строк в файл proxies_residential.txt или proxies_datacenter.txt и используйте rotate=True. Либо используйте смену IP по ссылке или запросу API.

Массовый скрапинг с паузами:

Добавьте задержки для имитации человеческого поведения:

import time  
time.sleep(random.uniform(1, 5))  # Пауза 1-5 сек перед запросом

💡 Совет: некоторые веб-сайты могут использовать механизмы проверки на основе CAPTCHA для предотвращения автоматического доступа. Если в вашем рабочем процессе возникают такие проблемы, вы можете интегрировать сторонний сервис обработки CAPTCHA, такой как CapSolver. Он поддерживает reCAPTCHA v2/v3, Cloudflare Turnstile, Challenge, AWS WAF и другие. Убедитесь, что ваше использование соответствует условиям обслуживания целевого веб-сайта и применимым законам.

Решение проблем:

  • Ошибка подключения: Проверьте формат в файлах (login:password@host:port). Тестируйте прокси в браузере.
  • Блокировка несмотря на прокси: Увеличьте паузы или смените тип (на мобильные для жёстких сайтов). Добавьте stealth mode в Crawl4AI: browser_type="undetected" в BrowserConfig.
  • Playwright ошибки: Убедитесь, что playwright install выполнен. Если headless=False, браузер откроется visibly для отладки.
  • SOCKS5 auth ошибка: Playwright не поддерживает — используйте HTTP прокси.
  • Asyncio исключения: Игнорируйте; это Windows-специфика, не влияет.
  • Логирование: Вклюйте verbose=True в Crawl4AI для детальных логов.

Заключение

Crawl4AI + прокси от CyberYozh App — идеальный дуэт для сбора данных без блокировок. Выберите:

  • Резидентские Ротационные для массовых датасетов (Amazon/Google).
  • Мобильные Общие (Shared) для соцсетей и защищённых сайтов.
  • Резидентские Статические для сессионных задач.
  • Датацентровые Статические для простых и быстрых сборов данных.

Перейдите в каталог CyberYozh App, выберите подходящие прокси, настройте Crawl4AI и масштабируйте свой AI-скрапинг.

Дополнительная документация: Crawl4AI GitHub