Как работает Apify: Полное руководство для начинающих

Что такое Apify и для чего он нужен?

Apify — это облачная платформа, предназначенная для веб-скрапинга, извлечения данных и автоматизации веб-процессов. Она предоставляет разработчикам инфраструктуру и инструменты для создания, запуска и управления масштабируемыми веб-краулерами и ботами, называемыми «акторами». Основная задача Apify — упростить сбор данных из интернета и автоматизировать рутинные задачи, связанные с веб-взаимодействием.

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

Основные концепции: Акторы, Задачи, Хранилище данных

Понимание ключевых компонентов Apify необходимо для эффективного использования платформы:

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

Преимущества использования Apify

Использование Apify дает ряд существенных преимуществ:

  • Масштабируемость: Платформа автоматически масштабирует ресурсы в зависимости от нагрузки, позволяя обрабатывать миллионы страниц без необходимости управлять серверами.
  • Управление прокси: Apify предоставляет встроенные решения для ротации IP-адресов (датацентровые и резидентные прокси), что критически важно для обхода блокировок при скрапинге.
  • Готовая инфраструктура: Отпадает необходимость настраивать серверы, базы данных, очереди сообщений и мониторинг. Apify предоставляет все это «из коробки».
  • Гибкость разработки: Поддержка Node.js и Python, наличие SDK и CLI предоставляют разработчикам удобные инструменты для создания сложных акторов.
  • Экосистема и сообщество: Apify Store предлагает множество готовых акторов для различных задач, а активное сообщество помогает решать возникающие проблемы.

Начало работы с Apify

Регистрация и настройка аккаунта Apify

Первый шаг — создание аккаунта на платформе Apify. Перейдите на сайт apify.com и пройдите стандартную процедуру регистрации. После подтверждения email вы получите доступ к Apify Console. Платформа предлагает бесплатный план с ограниченными ресурсами, достаточный для ознакомления и небольших проектов.

В настройках аккаунта (Account settings) важно обратить внимание на раздел Billing для управления подпиской и раздел Integrations для подключения сторонних сервисов. Также здесь можно найти ваш персональный API-токен, необходимый для работы с Apify API и CLI.

Обзор интерфейса Apify Console

Apify Console — это веб-интерфейс для управления всеми аспектами платформы:

  • Actors: Раздел для создания, управления и запуска ваших акторов, а также для доступа к Apify Store.
  • Tasks: Управление задачами (конфигурациями запуска акторов).
  • Schedules: Настройка расписаний для автоматического запуска задач.
  • Storage: Доступ к вашим Datasets, Key-Value Stores и Request Queues.
  • Proxy: Настройка и мониторинг использования прокси-серверов.
  • Settings: Управление настройками аккаунта, API-ключами, интеграциями.

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

Установка Apify CLI (интерфейса командной строки)

Apify CLI — мощный инструмент для локальной разработки, тестирования и развертывания акторов. Для его установки необходим Node.js (включая npm).

Установка выполняется командой:

npm install -g apify-cli

После установки необходимо войти в свой аккаунт Apify:

apify login

Вам будет предложено ввести ваш API-токен, который можно найти в настройках аккаунта в Apify Console (раздел Integrations).

Основные команды Apify CLI:

  • apify init [actor_name] — Создает структуру проекта для нового актора.
  • apify run — Запускает актора локально для тестирования.
  • apify push — Загружает код актора в Apify Console.
  • apify call [actor_name] — Запускает актора на платформе Apify.

Разработка и запуск акторов

Что такое актор и как он работает?

Актор — это изолированное приложение, выполняющееся в контейнере Docker на платформе Apify. Он получает на вход JSON-объект с параметрами, выполняет определенную логику (например, обход сайта, извлечение данных) и сохраняет результаты в хранилище Apify (Dataset, Key-Value Store).

Жизненный цикл актора управляется платформой: Apify выделяет ресурсы, запускает контейнер с кодом актора, передает ему входные данные и обеспечивает доступ к сервисам Apify (прокси, хранилище). После завершения работы актора ресурсы освобождаются.

Создание простого актора (пример: Hello World)

Используем Apify CLI для создания базовой структуры актора:

apify init my-hello-world

Выберите шаблон (например, «Hello World in Node.js»). CLI создаст директорию my-hello-world со следующей структурой:

my-hello-world/
├── .actor/
│   └── actor.json       # Манифест актора (метаданные)
├── src/
│   └── main.js          # Основной код актора
├── Dockerfile           # Инструкции для сборки Docker-образа
├── package.json         # Зависимости Node.js
└── README.md            # Описание актора

Файл main.js (или main.py для Python) содержит основную логику. Пример для Node.js:

// src/main.js
import { Actor } from 'apify';

/**
 * Основная функция актора.
 * @async
 */
async function main() {
    // Инициализация актора
    await Actor.init();

    console.log('Initializing the Actor.');

    // Получение входных данных (если они есть)
    // Пример: { "name": "Apify User" }
    const input = await Actor.getInput();
    const name = input?.name || 'World';

    console.log(`Input received: ${JSON.stringify(input)}`);

    // Выполнение основной логики
    const message = `Hello, ${name}!`;
    console.log(message);

    // Сохранение результата в Key-Value Store по умолчанию
    await Actor.setValue('OUTPUT', { message });

    // Сохранение результата в Dataset по умолчанию
    await Actor.pushData({ greeting: message, receivedName: name });

    console.log('Actor finished successfully.');

    // Завершение работы актора
    await Actor.exit();
}

// Запуск основной функции
main();

Использование Apify SDK для разработки акторов

Apify SDK (доступен для Node.js и Python) — это ключевой инструмент для разработки акторов. Он предоставляет удобные абстракции для взаимодействия с платформой Apify:

  • Actor.init() / Actor.exit(): Инициализация и завершение работы актора.
  • Actor.getInput(): Получение входных данных.
  • Actor.setValue(key, value) / Actor.getValue(key): Работа с Key-Value Store.
  • Actor.pushData(data): Добавление записей в Dataset.
  • RequestQueue.open() / RequestList.open(): Работа с очередями URL.
  • PuppeteerCrawler / PlaywrightCrawler / CheerioCrawler (Node.js) / PlaywrightCrawler / BeautifulSoupCrawler (Python): Высокоуровневые классы для обхода сайтов, автоматизирующие управление браузерами, обработку ошибок, использование прокси и сохранение результатов.

Пример использования PlaywrightCrawler для скрапинга заголовков с сайта (Node.js/TypeScript):

import { Actor, PlaywrightCrawler, RequestQueue } from 'apify';
import { Page } from 'playwright';

interface InputSchema {
    startUrls: { url: string }[];
    maxRequestsPerCrawl?: number;
}

/**
 * Обработчик для каждой страницы.
 * @param {object} context - Контекст краулера.
 * @param {Page} context.page - Экземпляр страницы Playwright.
 * @param {object} context.request - Объект запроса Apify.
 * @async
 */
async function handlePageFunction({ page, request }: { page: Page; request: any }): Promise<void> {
    console.log(`Processing ${request.url}...`);

    // Извлечение заголовка страницы
    const title: string = await page.title();

    // Сохранение результата в Dataset
    await Actor.pushData({ url: request.url, title });
}

async function main() {
    await Actor.init();
    console.log('Actor initialized.');

    const input = await Actor.getInput<InputSchema>();
    if (!input?.startUrls) {
        throw new Error('Input must contain startUrls array.');
    }

    const requestQueue = await RequestQueue.open();
    for (const req of input.startUrls) {
        await requestQueue.addRequest({ url: req.url });
    }

    console.log('Starting the crawl.');

    const crawler = new PlaywrightCrawler({
        requestQueue,
        handlePageFunction,
        maxRequestsPerCrawl: input.maxRequestsPerCrawl || 100,
        launchContext: {
            // Используем прокси Apify по умолчанию
            useChrome: true,
            // Дополнительные опции запуска Playwright...
        },
        // Обработка ошибок
        handleFailedRequestFunction: async ({ request }) => {
            console.error(`Request ${request.url} failed.`);
        },
    });

    await crawler.run();

    console.log('Crawl finished.');
    await Actor.exit();
}

main();

Загрузка и запуск актора в Apify Console

После локальной разработки и тестирования (apify run), актор можно загрузить на платформу:

cd my-hello-world  # Перейдите в директорию актора
apify push

Эта команда соберет Docker-образ (если необходимо) и загрузит код актора в Apify Console. После успешной загрузки актор появится в разделе «Actors» вашего аккаунта.

Запустить актора можно непосредственно из Apify Console, нажав кнопку «Run». Перед запуском можно настроить входные данные (Input), параметры запуска (память, таймауты) и выбрать прокси. Также можно создать Задачу (Task) для сохранения конфигурации запуска и запускать ее по расписанию.

Примеры использования Apify

Веб-скрапинг: сбор данных с веб-сайтов

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

Использование CheerioCrawler (для статических сайтов) или PlaywrightCrawler/PuppeteerCrawler (для динамических сайтов, требующих выполнения JavaScript) позволяет эффективно обходить сайты, извлекать нужные элементы с помощью CSS-селекторов или XPath и сохранять их в Dataset.

Автоматизация задач: отправка форм, клики по кнопкам

Apify можно использовать для автоматизации рутинных действий на веб-сайтах. С помощью PlaywrightCrawler или PuppeteerCrawler можно имитировать поведение пользователя: заполнять и отправлять формы (например, для регистрации или входа в систему), кликать по кнопкам и ссылкам, скачивать файлы.

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

Мониторинг сайтов: отслеживание изменений на страницах

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

  • Изменение цен на товары у конкурентов.
  • Появление новых статей или комментариев на интересующих сайтах.
  • Доступность товаров (появление статуса «в наличии»).
  • Изменения в HTML-структуре сайта (для отслеживания обновлений или поломок).

Результаты каждого запуска можно сравнивать с предыдущими, используя Key-Value Store для хранения предыдущего состояния, и отправлять уведомления при обнаружении значимых изменений.

Работа с данными в Apify

Хранилище данных: организация и доступ к данным

Apify предоставляет три основных типа хранилищ, доступных как через SDK внутри актора, так и через Apify Console и API:

  • Dataset: Основное хранилище для результатов скрапинга. Представляет собой набор JSON-объектов. Данные можно просматривать в Console, фильтровать и экспортировать.
  • Key-Value Store: Хранилище для пар ключ-значение. Удобно для сохранения состояния актора, логов, скриншотов, небольших файлов или промежуточных результатов. Каждому запуску актора соответствует свой Key-Value Store по умолчанию.
  • Request Queue: Управляет очередью URL для обхода. Хранит информацию о том, какие URL уже обработаны, какие находятся в очереди, а какие завершились с ошибкой. Обеспечивает отказоустойчивость краулинга.

Доступ к данным осуществляется по уникальным идентификаторам хранилищ.

Экспорт данных: форматы и способы (CSV, JSON, Excel)

Данные, сохраненные в Dataset, можно легко экспортировать в различных форматах прямо из Apify Console. Доступные форматы включают:

  • JSON
  • CSV
  • Excel (XLSX)
  • XML
  • HTML

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

Интеграция с другими сервисами (Zapier, Make/Integromat, Airbyte)

Apify предлагает готовые интеграции с популярными платформами автоматизации и передачи данных:

  • Zapier / Make (ранее Integromat): Позволяют настроить рабочие процессы, которые запускаются при завершении актора или задачи. Например, можно автоматически отправлять собранные данные в Google Sheets, Slack, Trello или CRM-систему.
  • Airbyte / Keboola: Интеграции с ETL-платформами для загрузки данных из Apify Dataset напрямую в хранилища данных (Data Warehouses) вроде BigQuery, Snowflake, Redshift.
  • Webhooks: Apify позволяет настроить отправку webhook-уведомлений при наступлении определенных событий (например, успешное завершение актора, ошибка), что обеспечивает гибкую интеграцию с любыми внешними системами через HTTP-запросы.
  • Apify API: Предоставляет полный программный доступ ко всем функциям платформы, включая запуск акторов, управление задачами и получение данных из хранилищ, для создания кастомных интеграций.

Добавить комментарий