Что такое 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: Предоставляет полный программный доступ ко всем функциям платформы, включая запуск акторов, управление задачами и получение данных из хранилищ, для создания кастомных интеграций.