Apify — это платформа для веб-скрейпинга и автоматизации. Вы создаёте, запускаете и масштабируете бессерверные облачные программы под названием Actors. Actors собирают данные с веб-сайтов, сканируют веб, обрабатывают данные или автоматизируют рабочие процессы. Каждый запуск Actor создаёт структурированный результат, который сохраняется в датасетах (коллекциях объектов JSON).
Загружайте собранные или обработанные данные в ClickHouse для аналитики, мониторинга или конвейеров обогащения.
Ключевые понятия
| Понятие Apify | Что это |
|---|---|
| Actor | Бессерверная облачная программа, работающая на платформе Apify. В Apify Store доступны тысячи готовых Actor. |
| Dataset | Результат выполнения Actor. Табличная коллекция объектов JSON, доступная в форматах JSON, CSV, XML и других через Apify API. |
| Webhook | HTTP-вызов, запускаемый по событию, когда выполнение Actor завершается успешно, с ошибкой или достигает других этапов жизненного цикла. Используйте вебхуки, чтобы автоматизировать конвейер от Apify до ClickHouse. |
Руководство по настройке
Подготовьте сведения о подключении к ClickHouse
Чтобы подключиться к ClickHouse по HTTP(S), вам понадобится следующая информация:
| Параметр(ы) | Описание |
|---|---|
HOST and PORT |
Обычно используется порт 8443 при использовании TLS и 8123 без TLS. |
DATABASE NAME |
По умолчанию есть база данных default; используйте имя базы данных, к которой хотите подключиться. |
USERNAME and PASSWORD |
По умолчанию имя пользователя — default. Используйте имя пользователя, подходящее для вашего сценария использования. |
Сведения о подключении для вашего сервиса ClickHouse Cloud доступны в консоли ClickHouse Cloud. Выберите сервис и нажмите Connect:

Выберите HTTPS. Сведения о подключении будут показаны в примере команды curl.

Если вы используете самоуправляемый ClickHouse, сведения о подключении задаёт ваш администратор ClickHouse.
Необходимые условия для Apify
Также вам понадобятся:
- Учетная запись Apify (доступен бесплатный уровень).
- API-токен Apify, который можно найти в разделе Settings > Integrations в консоли Apify.
- Локально установленный Node.js 18+ (для примеров на JavaScript).
Установите зависимости
Установите JavaScript-клиент Apify и JavaScript-клиент ClickHouse:
npm install apify-client @clickhouse/clientСоздайте целевую таблицу в ClickHouse
Создайте таблицу для хранения собранных данных. Схема зависит от используемого Actor. В этом примере для Actor, собирающего данные о товарах, используется MergeTree:
CREATE TABLE apify_products
(
url String,
title String,
price Float64,
currency String,
scraped_at DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY (scraped_at, url);Получите датасет Apify и загрузите его в ClickHouse
Следующий скрипт получает результаты запуска Actor в Apify и вставляет их в ClickHouse:
import { ApifyClient } from 'apify-client';
import { createClient } from '@clickhouse/client';
// Инициализация клиентов
const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
const clickhouse = createClient({
url: 'https://YOUR_CLICKHOUSE_HOST:8443',
username: 'default',
password: 'YOUR_CLICKHOUSE_PASSWORD',
database: 'default',
});
// Получение элементов dataset из последнего запуска Actor
const run = await apify.actor('YOUR_ACTOR_ID').call();
const { items } = await apify.dataset(run.defaultDatasetId).listItems();
console.log(`Fetched ${items.length} items from Apify dataset.`);
// Вставка в ClickHouse
await clickhouse.insert({
table: 'apify_products',
values: items,
format: 'JSONEachRow',
});
console.log(`Inserted ${items.length} rows into ClickHouse.`);
await clickhouse.close();Автоматизируйте процесс с помощью вебхуков
Вместо ручного запуска скрипта автоматизируйте конвейер, чтобы данные загружались в ClickHouse каждый раз, когда Actor завершает работу:
- В консоли Apify перейдите к нужному Actor и откройте вкладку Integrations.
- Добавьте новый вебхук со следующими параметрами:
- Тип события:
ACTOR.RUN.SUCCEEDED - Действие: HTTP POST на конечную точку вашего загрузчика либо запуск другого Actor, который выполняет вставку в ClickHouse.
- Тип события:
- Полезная нагрузка вебхука включает
defaultDatasetId, который можно использовать для получения результатов запуска.
Подробные сведения о полезной нагрузке и параметрах конфигурации см. в документации Apify по вебхукам.
Альтернативный вариант — использовать Apify Schedules для запуска Actors по cron-подобному расписанию в сочетании с вебхуками для этапа загрузки.
Рекомендации по лучшей практике
Получение данных из Apify
Используйте клиентскую библиотеку Apify (apify-client для JavaScript или Python) вместо прямых HTTP-запросов. Она сама обрабатывает пагинацию, повторные попытки и аутентификацию. Для больших датасетов постранично получайте результаты с помощью параметров limit и offset конечной точки Список элементов датасета.
Загрузка данных в ClickHouse
При вставке данных в ClickHouse используйте формат JSONEachRow. Он напрямую соответствует JSON-выводу Apify, поэтому никакого преобразования не требуется.
Схема таблицы ClickHouse должна соответствовать выходным полям Actor. Проверить выходную схему Actor можно на его странице в Apify Store или на вкладке Dataset после выполнения.
Производительность
Для высокопроизводительных вставок из JavaScript-клиента следуйте рекомендациям в разделе Советы по оптимизации производительности. Собирайте строки в более крупные батчи для вставки вместо того, чтобы вставлять их по одной, и рассмотрите асинхронные вставки, если батчинг на стороне клиента непрактичен.
Безопасность
В примерах на этой странице для простоты используются пользователь и база данных default. В рабочей среде создайте отдельного пользователя с минимальными привилегиями, необходимыми для вставки данных в целевую таблицу, и храните учетные данные в безопасном месте (например, в переменных окружения или менеджере secrets, а не добавляйте их в исходный код). Рекомендации см. в разделе Cloud access management.