Быстрый старт
В этом кратком руководстве вы научитесь использовать Crawlee для веб-скрапинга всего за пару минут. Чтобы глубже разобраться в работе Crawlee, прочитайте Введение - подробное пошаговое руководство по созданию вашего первого скрапера.
Выберите свой краулер
Crawlee предлагает три основных класса краулеров: CheerioCrawler
, PuppeteerCrawler
и PlaywrightCrawler
. Все классы используют одинаковый интерфейс для максимального удобства при переключении между ними.
CheerioCrawler
Это простой HTTP-краулер. Он анализирует HTML с помощью библиотеки Cheerio и использует специализированный HTTP-клиент got-scraping, который маскируется под браузер. Он очень быстрый и эффективный, но не может обрабатывать JavaScript.
PuppeteerCrawler
Этот краулер использует безголовый браузер для обхода, управляемый библиотекой Puppeteer. Он может управлять как Chromium, так и Chrome. Puppeteer является де-факто стандартом в автоматизации безголовых браузеров.
PlaywrightCrawler
Playwright является более мощным и полным наследником Puppeteer. Он может управлять Chromium, Chrome, Firefox, Webkit и многими другими браузерами. Если вы не знакомы с Puppeteer, и вам нужен безголовый браузер, выберите Playwright.
Для работы Crawlee требуется Node.js версии 16 или выше.
Установка с помощью Crawlee CLI
Самый быстрый способ начать работу с Crawlee - использовать Crawlee CLI и выбрать пример для начинающих. CLI установит все необходимые зависимости и добавит базовый код для экспериментов.
npx crawlee create my-crawler
После завершения установки вы можете запустить краулер следующим образом:
cd my-crawler && npm start
Ручная установка
Вы можете добавить Crawlee в любой проект Node.js, выполнив команду:
- CheerioCrawler
- PlaywrightCrawler
- PuppeteerCrawler
npm install crawlee
playwright
не входит в комплект Crawlee для уменьшения размера установки и обеспечения большей гибкости. Вам нужно установить его отдельно через NPM. 👇
npm install crawlee playwright
puppeteer
не входит в комплект Crawlee для уменьшения размера установки и обеспечения большей гибкости. Вам нужно установить его отдельно через NPM. 👇
npm install crawlee puppeteer
Сканирование
Запустите следующий пример для рекурсивного сканирования веб-сайта Crawlee с помощью выбранного краулера.
Чтобы запустить пример, добавьте параметр "type": "module"
в ваш package.json
или
скопируйте код в файл с расширением .mjs
. Это позволит использовать операторы import
в Node.js.
Подробнее см. в документации Node.js.
- CheerioCrawler
- PlaywrightCrawler
- PuppeteerCrawler
import { CheerioCrawler, Dataset } from 'crawlee';
// CheerioCrawler выполняет веб-скрейпинг с помощью HTTP-запросов
// и парсит HTML с использованием библиотеки Cheerio
const crawler = new CheerioCrawler({
// Используем requestHandler для обработки каждой посещенной страницы
async requestHandler({ request, $, enqueueLinks, log }) {
const title = $('title').text();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
// Сохраняем результаты в формате JSON в директорию ./storage/datasets/default
await Dataset.pushData({ title, url: request.loadedUrl });
// Извлекаем ссылки с текущей страницы
// и добавляем их в очередь для обработки
await enqueueLinks();
},
// Ограничиваем количество запросов для безопасности и ускорения тестирования
maxRequestsPerCrawl: 50,
});
// Добавляем первый URL в очередь и запускаем краулер
await crawler.run(['https://crawlee.dev']);
import { PlaywrightCrawler, Dataset } from 'crawlee';
// PlaywrightCrawler использует безголовый браузер,
// управляемый библиотекой Playwright, для обхода веб-страниц.
const crawler = new PlaywrightCrawler({
// Используйте requestHandler для обработки каждой посещенной страницы.
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
// Сохраняем результаты в формате JSON в ./storage/datasets/default
await Dataset.pushData({ title, url: request.loadedUrl });
// Извлекаем ссылки с текущей страницы
// и добавляем их в очередь для обхода.
await enqueueLinks();
},
// Раскомментируйте эту опцию, чтобы увидеть окно браузера.
// headless: false,
// Ограничим количество запросов для безопасности и скорости тестирования.
maxRequestsPerCrawl: 50,
});
// Добавляем первый URL в очередь и начинаем обход.
await crawler.run(['https://crawlee.dev']);
import { PuppeteerCrawler, Dataset } from 'crawlee';
// PuppeteerCrawler выполняет веб-скрейпинг с использованием
// браузера в безголовом режиме под управлением библиотеки Puppeteer
const crawler = new PuppeteerCrawler({
// Используйте requestHandler для обработки каждой посещенной страницы
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
// Сохраняем результаты в формате JSON в ./storage/datasets/default
await Dataset.pushData({ title, url: request.loadedUrl });
// Извлекаем ссылки с текущей страницы
// и добавляем их в очередь для обработки
await enqueueLinks();
},
// Раскомментируйте эту опцию, чтобы увидеть окно браузера
// headless: false,
// Ограничим количество запросов для безопасности и скорости тестирования
maxRequestsPerCrawl: 50,
});
// Добавляем первый URL в очередь и запускаем сканирование
await crawler.run(['https://crawlee.dev']);
При запуске примера вы увидите, как Crawlee автоматизирует процесс извлечения данных в вашем терминале.
INFO CheerioCrawler: Starting the crawl
INFO CheerioCrawler: Title of https://crawlee.dev/ is 'Crawlee · Build reliable crawlers. Fast. | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/examples is 'Examples | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/quick-start is 'Quick Start | Crawlee'
INFO CheerioCrawler: Title of https://crawlee.dev/docs/guides is 'Guides | Crawlee'
Запуск браузеров с графическим интерфейсом
Браузеры, управляемые Puppeteer и Playwright, по умолчанию запускаются в безголовом режиме (без видимого окна). Вы можете переключиться в режим с графическим интерфейсом, добавив опцию headless: false
в конструктор краулера. Это полезно на этапе разработки, когда вы хотите видеть, что происходит в браузере.
- PlaywrightCrawler
- PuppeteerCrawler
import { PlaywrightCrawler, Dataset } from 'crawlee';
const crawler = new PlaywrightCrawler({
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
await Dataset.pushData({ title, url: request.loadedUrl });
await enqueueLinks();
},
// Когда режим headless отключен, краулер
// будет работать с видимым окном браузера.
headless: false,
// Ограничим количество запросов для безопасности и скорости тестирования.
maxRequestsPerCrawl: 50,
});
// Добавим первый URL в очередь и запустим краулер.
await crawler.run(['https://crawlee.dev']);
import { PuppeteerCrawler, Dataset } from 'crawlee';
const crawler = new PuppeteerCrawler({
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`Title of ${request.loadedUrl} is '${title}'`);
await Dataset.pushData({ title, url: request.loadedUrl });
await enqueueLinks();
},
// Когда режим headless отключен, браузер
// будет запускаться с видимым окном
headless: false,
// Ограничим количество запросов для безопасности
maxRequestsPerCrawl: 50,
});
// Добавляем первый URL в очередь и запускаем сканирование
await crawler.run(['https://crawlee.dev']);
При запуске примера кода вы увидите, как автоматизированный браузер быстро просматривает веб-сайт Crawlee.
Для демонстрации мы замедлили работу краулера, но в реальном использовании он работает очень быстро.


Результаты
Crawlee сохраняет данные в директорию ./storage
в вашей текущей рабочей директории. Результаты сканирования будут доступны в виде JSON-файлов в ./storage/datasets/default/*.json
.
{
"url": "https://crawlee.dev/",
"title": "Crawlee · The scalable web crawling, scraping and automation library for JavaScript/Node.js | Crawlee"
}
Вы можете изменить директорию хранения, установив переменную окружения CRAWLEE_STORAGE_DIR
.
Примеры и дополнительная информация
Больше примеров, демонстрирующих различные возможности Crawlee, вы найдете в разделе Примеры документации. Чтобы лучше понять Crawlee и его компоненты, рекомендуем прочитать пошаговое руководство Введение.
Связанные ссылки