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('Краулер закончил работу.');