Перейти к основному содержимому

HTTP краулер

В этом примере показано, как использовать HttpCrawler для создания HTML-краулера, который обрабатывает список URL-адресов из внешнего файла, загружает каждый URL с помощью обычного HTTP-запроса и сохраняет HTML-контент.

Run on
import { HttpCrawler, log, LogLevel } from 'crawlee';

// Краулеры имеют различные утилиты, например, для логирования.
// Здесь мы используем уровень логирования DEBUG для улучшения опыта отладки.
// Эта функциональность является необязательной!
log.setLevel(LogLevel.DEBUG);

// Создаем экземпляр класса HttpCrawler - краулера,
// который автоматически загружает URL и сохраняет их HTML.
const crawler = new HttpCrawler({
// Краулер загружает и обрабатывает веб-страницы параллельно, с автоматическим управлением конкоррентностью
// на основе доступной системной памяти и ЦП (см. класс AutoscaledPool).
// Здесь мы определяем некоторые жесткие ограничения для конкоррентности.
minConcurrency: 10,
maxConcurrency: 50,

// При ошибке повторяем каждую страницу не более одного раза.
maxRequestRetries: 1,

// Увеличиваем таймаут для обработки каждой страницы.
requestHandlerTimeoutSecs: 30,

// Ограничиваем 10 запросов на один краулинг.
maxRequestsPerCrawl: 10,

// Эта функция будет вызываться для каждого URL для краулинга.
// Она принимает один параметр, который является объектом с опциями:
// https://crawlee.dev/api/http-crawler/interface/HttpCrawlerOptions#requestHandler
// Мы используем для демонстрации только 2 из них:
// - request: экземпляр класса Request с информацией, такой как URL, который краулится, и HTTP-метод
// - body: HTML-код текущей страницы
async requestHandler({ pushData, request, body }) {
log.debug(`Processing ${request.url}...`);

// Сохраняем результаты в набор данных. В локальной конфигурации
// данные будут сохранены в виде JSON-файлов в ./storage/datasets/default
await pushData({
url: request.url, // URL страницы
body, // HTML-код страницы
});
},

// Эта функция вызывается, если обработка страницы завершилась неудачно более maxRequestRetries + 1 раз.
failedRequestHandler({ request }) {
log.debug(`Запрос ${request.url} не выполнен дважды.`);
},
});

// Запускаем краулер и ждем, пока он закончит работу.
// Он краулит список URL из внешнего файла, загружает каждый URL с помощью обычного HTTP-запроса и сохраняет HTML.
await crawler.run(['https://crawlee.dev']);

log.debug('Краулер закончил работу.');