Введение

В этом пошаговом гайде вы настроите полноценный облачный веб-скрейпинг в Apify с использованием мобильных прокси, создадите актор на Node.js, запустите тестовую задачу на сбор карточек товаров и научитесь безопасно управлять лимитами, чтобы избежать ошибок и блокировок. Гайд рассчитан на начинающих, но включает разделы для продвинутых пользователей. В конце у вас будет готовый к повторному использованию актор, рабочая схема прокси, проверка результата, чек-листы, разбор типичных ошибок и подсказки по оптимизации. При желании вы сможете расширить проект, добавив планировщик, экспорт в Google Sheets, интеграции по API и мониторинг. Если вам нужен быстрый ответ на практический вопрос, сразу перейдите к разделу FAQ, но для полноценного результата пройдите все шаги.

Для кого этот гайд: для тех, кто хочет понять, как запустить Apify-актор с мобильными прокси, не тратя недели на разбор документации. Будет полезен маркетологам, аналитикам, ресерчерам, владельцам интернет-проектов и разработчикам-новичкам, кому нужен надежный и повторяемый сбор данных из веба.

Что нужно знать заранее: базовые понятия JavaScript будут полезны, но не обязательны. Мы подробно распишем, куда кликать, что вводить и как проверить результат. Важно уметь авторизоваться в веб-сервисе, копировать токены доступа и аккуратно работать с паролями.

Сколько времени потребуется: 2–3 часа на полный проход, включая регистрацию, настройку актора, интеграцию прокси, тестовый запуск и проверку результатов. Если у вас уже есть аккаунт Apify и доступ к мобильным прокси, уложитесь в 60–90 минут.

Предварительная подготовка

Необходимые инструменты, программы и доступы

  • Аккаунт Apify с доступом к запуску акторов.
  • Node.js версии LTS (18 или выше) на локальном компьютере, если вы хотите редактировать код локально. Можно обойтись встроенным редактором в Apify, но локально удобнее.
  • Учетные данные к мобильным прокси. В качестве примера используем провайдера mobileproxy.space, где можно получить логин, пароль и адрес прокси-сервера. Вы можете использовать любой аналогичный сервис.
  • Текстовый редактор: VS Code или любой другой.
  • Apify CLI (опционально) для локальной разработки и загрузки актора в облако.

Системные требования

  • Стабильный доступ в интернет.
  • Windows, macOS или Linux. Для локальной работы с актором подойдет любой современный компьютер.
  • Свободные 200–500 МБ на диске под зависимости npm, если вы пойдете через локальную разработку.

Что нужно скачать и установить

  1. Установите Node.js с официального сайта, выберите LTS. После установки проверьте командой в терминале: node -v и npm -v. Ожидаете увидеть версии без ошибок.
  2. Установите Apify CLI (опционально) командой: npm i -g apify-cli. После установки проверьте: apify --version.
  3. Подготовьте учетные данные от мобильных прокси: хост, порт, логин и пароль. Если используете mobileproxy.space, вы получите адрес вида host:port и пару user:password.

⚠️ Внимание: Никогда не публикуйте логины и пароли прокси в открытых репозиториях. Используйте переменные окружения или секреты платформы.

Создание резервных копий

Если вы редактируете код локально, держите резервную копию проекта (например, с помощью git). В Apify сама платформа хранит версии акторов, но лучше иметь локальный бэкап кода.

Совет: Если вы впервые работаете с Apify, начните прямо в браузере через редактор в интерфейсе платформы, а локальную разработку добавьте позже. Это ускорит старт.

Базовые понятия и что такое Apify

Ключевые термины простым языком

  • Apify — платформа для автоматизации работы в вебе: скрейпинг, краулинг, интеграции. Позволяет запускать код (акторы) в облаке, хранить результаты (Datasets) и управлять очередями ссылок.
  • Актор — контейнеризованное приложение (чаще на Node.js или Python), которое выполняет вашу задачу: открывает страницы, собирает данные, сохраняет результат.
  • Задача (Task) — сохраненная конфигурация запуска актора с предзаполненным входом. Удобно для регулярных перезапусков без изменения кода.
  • Dataset — хранилище результатов скрейпинга в виде таблицы. Можно экспортировать в JSON, CSV, XLSX.
  • Key-Value Store — хранилище произвольных файлов и настроек (например, входные параметры, отчеты).
  • Request Queue — очередь ссылок для краулера, чтобы хранить и обрабатывать URL системно.
  • ProxyConfiguration — конфигурация прокси. Можно использовать прокси Apify или внешние, в том числе мобильные.
  • Мобильные прокси — прокси, использующие мобильные сети операторов. Они часто воспринимаются сайтами как реальный мобильный трафик.

Основные принципы работы

Вы пишете актор, передаете ему входные параметры и запускаете в облаке. Актор получает список ссылок, открывает их через выбранный краулер (например, CheerioCrawler для легких HTML-страниц или PlaywrightCrawler для сложных сайтов), собирает данные и пишет их в Dataset. Для сетевых запросов актор использует прокси согласно ProxyConfiguration. Когда нужен устойчивый сбор с низким уровнем ложных срабатываний защиты, применяют мобильные прокси. Они позволяют распределить нагрузку и выглядеть для цели как мобильный пользователь.

Что важно понимать перед началом

  • Соблюдайте правила целевых сайтов и действующее законодательство. Используйте сбор данных этично и законно.
  • Даже мобильные прокси не дают иммунитета от ограничений. Важны темп запросов, задержки, правильные заголовки HTTP и качество кода краулера.
  • Лимиты платформы Apify и вашего тарифного плана влияют на параллелизм, память и время исполнения. Это настраивается и контролируется.

Совет: Если цель предоставляет официальный API, начните с него. Это стабильнее и этичнее, чем парсинг HTML.

Шаг 1: Зачем мобильные прокси в облачном скрейпинге

Цель этапа

Понять, в каких случаях мобильные прокси дают наилучший результат и как подобрать настройки, чтобы минимизировать блокировки и нестабильность при работе из облака.

Детальная пошаговая инструкция

  1. Определите цель сбора данных: список товаров, цены, отзывы, расписания, новости. Запишите конкретные типы страниц и их примерные URL.
  2. Оцените сложность сайта: открывается ли страница без JavaScript, как быстро грузится, есть ли динамическая подгрузка. Если сайт простой, достаточно CheerioCrawler; если сложный — используйте PlaywrightCrawler.
  3. Решите, нужна ли мобильная сессия: если сайт явно ориентирован на мобильных пользователей, показывает разные версии страниц для мобильных и десктопных клиентов, мобильные прокси помогут выглядеть естественно.
  4. Подберите провайдера мобильных прокси. В качестве примера можно использовать mobileproxy.space. Убедитесь, что у вас есть стабильный хост, порт, логин и пароль. Запишите их отдельно.
  5. Спланируйте частоту запросов. Начните с 1–2 одновременных вкладок и 1–3 запросов в секунду. При необходимости увеличивайте плавно, наблюдая за ошибками и ответами сайта.
  6. Решите, будете ли вы использовать ротацию IP. Для мобильных прокси ротация может происходить по команде или по таймеру у провайдера. Уточните политику и команды ротации у вашего провайдера.

Важные моменты

Мобильные прокси подходят, когда нужно снизить вероятность ложных срабатываний защиты или воспроизвести поведение мобильного клиента. Не используйте их для действий, запрещенных сайтом или законом. Корректно настраивайте заголовки User-Agent и задержки.

⚠️ Внимание: Не пытайтесь обходить технические ограничения сайтов. Если страница закрыта авторизацией или условиями использования, действуйте согласно правилам ресурса.

Ожидаемый результат

Вы понимаете, зачем применяются мобильные прокси, выбрали провайдера и готовы к настройке в акторе. У вас есть учетные данные прокси и план частоты запросов.

Возможные проблемы и их решения

  • Неясно, нужна ли мобильная версия. Решение: откройте сайт с мобильным User-Agent в браузере разработчика и сравните разметку. Если разница существенная, мобильная сессия уместна.
  • Сомневаетесь в надежности провайдера. Решение: протестируйте соединение через curl с вашим прокси, проверьте стабильность в течение 10–15 минут.

✅ Проверка: У вас на руках точные параметры прокси (хост, порт, логин, пароль) и вы зафиксировали желаемую частоту запросов.

Шаг 2: Регистрация в Apify и подготовка рабочего пространства

Цель этапа

Создать или подтвердить аккаунт Apify, войти в консоль, при необходимости установить Apify CLI и подготовиться к созданию актора.

Детальная пошаговая инструкция

  1. Зарегистрируйтесь в Apify. Введите почту, придумайте пароль, подтвердите e-mail. После входа откроется консоль с разделами Actors, Tasks, Storage.
  2. Перейдите в профиль и найдите ваш личный токен API. Скопируйте его в безопасное место, он пригодится для CLI и интеграций.
  3. Если используете CLI: установите apify-cli командой npm i -g apify-cli. Затем выполните apify login и вставьте токен. После успешного входа вы увидите подтверждение в терминале.
  4. Создайте рабочую папку проекта локально, если идете через локальную разработку. Выполните apify create и выберите шаблон на Node.js с Crawlee. Будет создана структура проекта с package.json и src/main.js.
  5. Если работаете только в браузере: нажмите New в разделе Actors и выберите шаблон Node.js + Crawlee. Платформа создаст пустой актор и откроет онлайн-редактор.

Важные моменты

Безопасность токена критична. Не вставляйте токен в код. Храните его в менеджере паролей. В CLI он сохраняется локально и не попадает в репозиторий, если вы не добавляете его вручную.

Совет: Назовите актор осмысленно, например mobile-crawler-products. Это упростит навигацию и автоматизацию.

Ожидаемый результат

Вы вошли в консоль Apify, при желании настроили CLI, создали пустой актор и видите файл main.js в редакторе (или локально в папке src).

Возможные проблемы и их решения

  • CLI не видит токен. Решение: запустите apify logout и снова apify login. Проверьте, что вводите актуальный токен из профиля.
  • Ошибки установки npm-зависимостей. Решение: обновите Node.js до LTS, очистите кэш npm командой npm cache clean --force и повторите установку.

✅ Проверка: У вас есть созданный актор с доступом к редактированию кода и базовая структура проекта на месте.

Шаг 3: Создание актора и загрузка шаблона

Цель этапа

Наполнить актор стартовым кодом на Crawlee, чтобы можно было сразу запустить краулер и убедиться в базовой работоспособности без прокси.

Детальная пошаговая инструкция

  1. Откройте файл main.js. Если его нет, создайте src/main.js. Убедитесь, что package.json содержит зависимости crawlee и apify.
  2. Вставьте базовый код краулера. Пример для CheerioCrawler: import { CheerioCrawler, Dataset } from "crawlee"; export const main = async () => { const startUrls = ["https://example.com/"]; const crawler = new CheerioCrawler({ requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); for (const url of startUrls) await crawler.addRequests([url]); await crawler.run(); };
  3. Сохраните файл. Если в браузере, нажмите кнопку Save. Если локально, сохраните изменения и выполните npm install, чтобы подтянуть библиотеки (если не подтянулись).
  4. Попробуйте запуск без прокси: запустите актор с дефолтным входом. В Dataset должен появиться хотя бы один объект с полем title.

Важные моменты

Минимальный MVP актора нужен, чтобы проверить пайплайн: запуск, логирование, сохранение результатов. Прежде чем добавлять прокси, убедитесь, что код работает на простой странице.

Совет: Начинайте с одной-двух стартовых ссылок. Это ускорит тесты и облегчит поиск проблем.

Ожидаемый результат

Актор успешно запускается и сохраняет результаты в Dataset. Вы видите логи, где указано, что данные сохранены, и отсутствуют ошибки типа DNS или сетевых таймаутов.

Возможные проблемы и их решения

  • Ошибка импорта пакетов. Решение: проверьте версии в package.json. При необходимости выполните npm i crawlee apify.
  • Нет данных в Dataset. Решение: проверьте селектор $("title").text() или замените на другую простую выборку, например $("h1").first().text().

✅ Проверка: В Dataset появился как минимум один объект c полями url и title. Логи показывают успешное завершение без исключений.

Шаг 4: Настройка прокси в акторе

Цель этапа

Подключить мобильные прокси к актору Apify так, чтобы весь сетевой трафик краулера шел через указанный прокси-сервер, и убедиться в стабильности соединения.

Детальная пошаговая инструкция

  1. Подготовьте строку прокси. Формат для внешнего HTTP-прокси: http://USERNAME:PASSWORD@HOST:PORT. Пример: http://user123:pass456@proxy.mobileproxy.space:12345. Для mobileproxy.space используйте учетные данные из личного кабинета.
  2. Добавьте ProxyConfiguration в код. Для CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new CheerioCrawler({ proxyConfiguration: proxy, requestHandler: async ({ request, $, log }) => { const title = $("title").text(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); }, maxConcurrency: 2, requestHandlerTimeoutSecs: 60, }); await crawler.addRequests(["https://httpbin.org/ip"]); await crawler.run(); };
  3. Сохраните изменения и запустите актор. Если всё верно, в Dataset вы увидите IP-адрес, который принадлежит вашему мобильному прокси (для httpbin.org/ip это будет JSON с origin или прокси IP).
  4. Если используете PlaywrightCrawler, добавляйте ту же ProxyConfiguration в параметры конструктора: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; const proxy = new ProxyConfiguration({ proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"] }); const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { const title = await page.title(); await Dataset.pushData({ url: request.loadedUrl, title }); log.info(`Saved: ${request.loadedUrl}`); } });
  5. При необходимости вынесите строку прокси в переменную окружения и прочитайте через process.env, чтобы не хранить пароль в коде. На платформе Apify используйте секцию Secrets и ENV Vars в настройках актора. Пример: const proxyUrl = process.env.MOBILE_PROXY_URL;

Важные моменты

Не смешивайте одновременно Apify Proxy и внешнюю мобильную прокси-конфигурацию. В рамках одного запуска используйте один понятный источник прокси. Настройка через proxyUrls полностью заменяет использование прокси Apify.

Совет: Сначала протестируйте прокси на простых страницах вроде https://httpbin.org/ip или аналогичных сервисов отображения IP. Так вы сразу поймете, что трафик идет через нужный адрес.

⚠️ Внимание: Если провайдер мобильных прокси поддерживает ротацию IP по специальному URL или команде, используйте это только в рамках его правил. Не меняйте IP слишком часто без необходимости: это может вызвать подозрения у целевого сайта.

Ожидаемый результат

Краулер успешно подключен к мобильному прокси. При проверке IP (через контрольную страницу) вы видите прокси-адрес, логи стабильные, запросы не падают по таймаутам.

Возможные проблемы и их решения

  • 401 или 407 в логах. Причина: неверные логин или пароль. Решение: перепроверьте учетные данные из личного кабинета провайдера.
  • ECONNRESET или ETIMEDOUT. Причина: нестабильность канала или блокировка домена. Решение: уменьшите параллелизм, повторно запустите после паузы, проверьте статус прокси у провайдера.

✅ Проверка: Dataset содержит результат запроса на страницу с отображением IP и там виден адрес мобильного прокси.

Шаг 5: Пример задачи: сбор данных с карточек товаров

Цель этапа

Собрать данные с реальных карточек товаров, используя мобильные прокси и устойчивые настройки краулера, и сохранить результаты в Dataset.

Детальная пошаговая инструкция

  1. Определите целевой список URL карточек или категории, где можно безопасно и законно собирать открытые данные. Запишите 3–5 ссылок для теста.
  2. Выберите краулер. Если страница статична, используйте CheerioCrawler. Если данные грузятся динамически, выбирайте PlaywrightCrawler.
  3. Добавьте основные селекторы для извлечения данных. Например: название товара, цена, валюта, рейтинг, наличие. В Cheerio это будут jQuery-подобные селекторы; в Playwright — page.locator.
  4. Пример для CheerioCrawler: import { CheerioCrawler, Dataset, ProxyConfiguration, log } from "crawlee"; export const main = async () => { log.setLevel(log.LEVELS.INFO); const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1", "https://example.com/product/2"]; const crawler = new CheerioCrawler({ proxyConfiguration: proxy, maxConcurrency: 2, requestHandlerTimeoutSecs: 90, requestHandler: async ({ request, $, log }) => { const title = $("h1.product-title").text().trim(); const priceText = $("span.price").text().trim(); const availability = $("div.stock").text().trim(); const currency = priceText.replace(/[0-9.,\s]/g, ""); const price = parseFloat(priceText.replace(/[^0-9.,]/g, "").replace(",", ".")) || null; await Dataset.pushData({ url: request.loadedUrl, title, price, currency, availability }); log.info(`Saved: ${title || "no title"}`); }, failedRequestHandler: async ({ request, log }) => { log.warning(`Failed ${request.url}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  5. Пример для PlaywrightCrawler: import { PlaywrightCrawler, Dataset, ProxyConfiguration } from "crawlee"; export const main = async () => { const proxy = new ProxyConfiguration({ proxyUrls: [process.env.MOBILE_PROXY_URL] }); const startUrls = ["https://example.com/product/1"]; const crawler = new PlaywrightCrawler({ proxyConfiguration: proxy, requestHandlerTimeoutSecs: 120, launchContext: { launchOptions: { headless: true } }, requestHandler: async ({ page, request, log }) => { await page.waitForLoadState("domcontentloaded"); const title = await page.title(); const price = await page.locator("span.price").first().textContent().catch(() => null); await Dataset.pushData({ url: request.loadedUrl, title, price }); log.info(`Saved: ${request.loadedUrl}`); } }); await crawler.addRequests(startUrls); await crawler.run(); };
  6. Сохраните MOBILE_PROXY_URL в переменных окружения актора на платформе Apify (раздел Settings → Environment variables). Значение: ваша строка прокси вида http://user:pass@host:port.
  7. Запустите актор. В логах следите за статусом запроса, временем ответа и числом успешно сохраненных записей.

Важные моменты

Структура данных в Dataset должна быть предсказуемой: задайте одинаковые поля для всех карточек, иначе экспорт в таблицы будет неудобным. Контролируйте таймауты: для динамических страниц увеличьте requestHandlerTimeoutSecs и добавьте ожидания загрузки ключевых селекторов.

Совет: Для плавной нагрузки установите min/max задержки между запросами с помощью autoscaled pool настройками или вручную добавляйте паузы в обработчике.

Ожидаемый результат

Dataset содержит по одной записи на карточку товара с ключевыми полями. Логи стабильны, ошибок авторизации прокси нет, а среднее время ответа приемлемо для вашего кейса.

Возможные проблемы и их решения

  • Некорректные селекторы. Причина: адаптивная вёрстка или разная структура страницы. Решение: проверьте мобильную и десктопную версию, используйте более устойчивые селекторы (data-атрибуты, уникальные id).
  • Пустые данные в отдельных полях. Причина: значения грузятся динамически. Решение: добавьте явное ожидание нужных элементов или используйте Playwright вместо Cheerio.

✅ Проверка: В Dataset есть записи с url, title, price или эквивалентными полями. Средний процент ошибок невелик и ниже 5–10% на тестовой выборке.

Шаг 6: Лимиты и оптимизация

Цель этапа

Настроить параллелизм, таймауты, повторные попытки, ротацию и хранение, чтобы экономно расходовать лимиты Apify и повысить устойчивость сбора.

Детальная пошаговая инструкция

  1. Ограничьте параллелизм. В параметрах краулера установите maxConcurrency от 1 до 3 для начала. Увеличивайте постепенно. Чем выше параллелизм, тем выше нагрузка на прокси и сайт.
  2. Настройте повторные попытки. В Crawlee есть retryCount и retryTimeoutMillis. Установите retryCount = 1–2, чтобы не дергать проблемные страницы бесконечно.
  3. Управляйте временем выполнения. Повысьте requestHandlerTimeoutSecs до 90–120 для тяжелых страниц. Это уменьшит ложные таймауты при медленных ответах через мобильную сеть.
  4. Добавьте случайные задержки. Между запросами вставляйте небольшие паузы 300–1500 мс. Это выглядит естественнее и уменьшает риск ограничений.
  5. Планируйте ротацию прокси у провайдера в разумных пределах. Если mobileproxy.space позволяет запрашивать новый IP по таймеру, выберите интервал, который не нарушает стабильность сессий.
  6. Следите за лимитами Apify: память, CPU, время. В настройках запуска укажите Memory (например, 1024–2048 MB для Playwright) и Max run time (например, 30–60 минут для батчей).
  7. Храните только нужные поля. Чем меньше избыточных данных в Dataset, тем ниже нагрузка на хранилище и быстрее экспорт. Убирайте HTML-фрагменты без необходимости.
  8. Включите логирование на уровне INFO и выборочно на DEBUG при отладке. Излишний объем логов может мешать чтению и не нужен в стабильном режиме.

Важные моменты

Экономия лимитов достигается несколькими простыми правилами: низкий стартовый параллелизм, короткие повторные попытки, точные селекторы и минимизация ненужных обращений к странице. Наблюдение через логи и мониторинги помогает корректировать настройки.

Совет: Фиксируйте успешные URL в Key-Value Store или внешнем хранилище. Это упростит перезапуск с места сбоя и не даст повторно обрабатывать уже собранные страницы.

Ожидаемый результат

Актор работает ровно, не расходует лишние ресурсы, а ошибки встречаются редко и предсказуемо. Параметры таймаутов и параллелизма подобраны под скорость вашего мобильного прокси и сложность сайта.

Возможные проблемы и их решения

  • Увеличение таймаутов не помогает. Причина: перегрузка страницы или проблемы провайдера. Решение: временно уменьшите параллелизм до 1 и проверьте стабильность соединения.
  • Слишком медленная скорость. Причина: узкое место в сети прокси или тяжелый сайт. Решение: увеличьте задержки, но параллельно подумайте о разделении задач на более мелкие батчи.

✅ Проверка: Среднее время на страницу стабильно, процент ошибок не растет при увеличении объема, лимиты памяти и времени не превышаются.

Проверка результата

Чек-лист: что должно работать

  • Актор запускается без ошибок и корректно завершает работу.
  • Мобильные прокси подключены, и IP в проверочных запросах соответствует прокси.
  • Dataset содержит ожидаемые поля и значения.
  • Логи информативны, но не перегружены.
  • При повторном запуске нет лишних дублей (или они контролируются).

Как протестировать

  1. Запустите актор на 2–3 тестовых URL с включенным прокси и проверьте IP через страницу-индикатор.
  2. Сравните числа: сколько запросов было добавлено и сколько результатов вы получили. Они должны совпадать или отличаться в пределах понятной ошибки.
  3. Экспортируйте Dataset в CSV и убедитесь, что данные чистые: без null там, где вы ожидаете значения.

Показатели успешного выполнения

  • Процент неудачных запросов ниже 5–10% на тесте.
  • Среднее время обработки страницы стабильно и предсказуемо.
  • Нет аномальных всплесков таймаутов и авторизационных ошибок прокси.

Совет: Зафиксируйте контрольный набор URL и повторяйте тест перед каждым крупным изменением кода. Так вы быстро поймаете регрессии.

Типичные ошибки и решения

  • Проблема: 407 Proxy Authentication Required. Причина: неверные учетные данные прокси. Решение: перепроверьте логин и пароль, обновите переменные окружения и перезапустите актор.
  • Проблема: ECONNRESET и ETIMEDOUT в логах. Причина: нестабильность сети или перегрузка. Решение: снизьте maxConcurrency, увеличьте таймауты и сделайте паузы между запросами.
  • Проблема: пустые поля в Dataset. Причина: неверные селекторы или динамическая загрузка. Решение: используйте PlaywrightCrawler, добавьте ожидания, пересмотрите селекторы.
  • Проблема: достигнут лимит памяти. Причина: слишком много параллельных вкладок или храните лишние данные. Решение: уменьшите параллелизм, сократите объем данных, поднимите Memory в настройках запуска.
  • Проблема: слишком медленный сбор. Причина: тяжелые страницы и мобильная сеть. Решение: ориентируйтесь на очередь важности данных, делите задачу на батчи, оптимизируйте селекторы и отключите лишние навигации.
  • Проблема: дубли в результатах. Причина: повторный запуск с теми же URL без фильтра. Решение: ведите список обработанных ссылок в Request Queue с уникализацией, или проверяйте дубликаты перед сохранением.
  • Проблема: чувствительный сайт реагирует на частые запросы. Причина: слишком агрессивный темп. Решение: уменьшите скорость, добавьте джиттер задержек, используйте корректные заголовки и актуальный User-Agent.

Совет: При отладке временно включайте подробные логи для одного-двух URL и анализируйте каждый шаг. Это быстрее, чем разбираться с длинными батчами.

Дополнительные возможности

Продвинутые настройки

  • Секреты и конфигурации. Храните MOBILE_PROXY_URL и другие ключи в секции Secrets. В коде читайте через process.env.
  • Смена User-Agent. Для имитации мобильного клиента установите мобильный User-Agent и соответствующую ширину viewport в Playwright. Делайте это умеренно и только если это необходимо для корректного отображения страницы.
  • Планировщик задач. Создайте Task и назначьте расписание запусков (ежедневно, ежечасно). Следите за лимитами и объемом результатов.

Оптимизация

  • Кэширование. Если страницы редко меняются, добавьте кэш запросов и повторных визитов, чтобы не тратить прокси и лимиты зря.
  • Очереди и приоритеты. Работайте через Request Queue, задавая приоритет важным ссылкам и пропуская второстепенные.
  • Разбиение на микросервисы. Сложную задачу разбейте на несколько акторов: сбор ссылок, обработка карточек, валидация и экспорт.

Что еще можно сделать

  • Интеграции по API. Подключите отправку результатов в ваш CRM или аналитическую систему после каждого запуска через Webhook.
  • Валидация данных. Перед экспортом проверяйте схемы: чтобы все значения соответствовали ожидаемому типу и диапазону.
  • Внутренние ссылки по документу. При необходимости возвращайтесь к разделу Лимиты и оптимизация при настройке производительности.

Совет: Используйте preview-режим и малые батчи для первичного прогона в расписании, затем масштабируйтесь постепенно.

FAQ

  • Как понять, что прокси действительно мобильный? Проверьте ASN и тип сети по IP через сторонние базы и сравните с мобильными операторами. Также мобильные прокси часто имеют характерный пул адресов с динамикой смены.
  • Можно ли использовать сразу несколько мобильных прокси? Да, укажите несколько proxyUrls. Crawlee автоматически будет выбирать один из списка. Следите за лимитами каждого прокси.
  • Что делать, если сайт показывает капчу? Снизьте частоту, добавьте задержки, проверьте заголовки и подумайте о использовании официального API ресурса. Избегайте действий, нарушающих правила сайта.
  • Как хранить пароли прокси безопасно? Используйте переменные окружения и Secrets на платформе Apify. Не коммитьте пароли в git.
  • Нужно ли менять User-Agent на мобильный? Только если сайт отдает разные версии страницы. В остальных случаях достаточно стабильного поведения и корректных задержек.
  • Почему CheerioCrawler быстрее? Он не рендерит страницу, а разбирает HTML. Для динамических страничек используйте PlaywrightCrawler, хотя он медленнее.
  • Как экспортировать результаты? В интерфейсе Dataset выберите экспорт в CSV, JSON, XLSX. Или используйте API Datasets, если хотите автоматизировать экспорт.
  • Можно ли комбинировать Apify Proxy и мобильные прокси? В одном запуске лучше использовать что-то одно. Если вам нужны разные источники, разделите задачи по актору или по конфигурациям запуска.
  • Сколько запросов в секунду безопасно? Начните с 1–3 в секунду и отслеживайте метрики. Для чувствительных сайтов снизьте до 0.2–0.5 с паузами.
  • Нужно ли включать headful в Playwright? Только для отладки. В продакшене используйте headless для экономии ресурсов.

Заключение

Вы настроили рабочий актор Apify с мобильными прокси, разобрались в ключевых понятиях и принципах, собрали тестовые данные с карточек товаров и оптимизировали лимиты. Теперь вы уверенно управляете параллелизмом, временем ожидания и хранением результатов, а также знаете, как обезопасить секреты и пароли. Дальше вы можете расширять проект: добавлять новые типы страниц, строить пайплайн из нескольких акторов, подключать планировщик и автоматические экспорты. Если возникнут точечные вопросы, возвращайтесь к разделу FAQ или к Лимитам и оптимизации. Помните, что мобильные прокси — это инструмент повышения стабильности и естественности трафика, а не способ обходить ограничения. Работайте этично, соблюдайте правила сайтов и всегда начинайте с малого, проверяя каждое изменение.