Руководство по CheerioCrawler
CheerioCrawler
- это наш самый простой и быстрый краулер. Если вы знакомы с jQuery, вы освоите CheerioCrawler
за считанные минуты.
Что такое Cheerio
Cheerio - это по сути jQuery для Node.js. Он предоставляет тот же API, включая знакомый объект $
. Вы можете использовать его так же, как jQuery для манипуляции DOM HTML-страницы. При веб-скрапинге вы в основном будете использовать его для выбора нужных элементов и извлечения их значений - данных, которые вас интересуют. Но jQuery работает в браузере и напрямую подключается к DOM браузера. Откуда же cheerio
получает HTML? Здесь в игру вступает часть Crawler
в CheerioCrawler
.
Как работает краулер
CheerioCrawler
выполняет обход сайтов, делая обычные HTTP-запросы к указанным URL-адресам с помощью специализированного HTTP-клиента got-scraping. URL-адреса подаются в краулер через RequestQueue
. HTTP-ответы, которые он получает, обычно представляют собой HTML-страницы - те же страницы, которые вы получили бы в браузере при первой загрузке URL. Однако он может обрабатывать любые типы контента с помощью опции additionalMimeTypes
.
Современные веб-страницы часто не предоставляют весь контент в первом HTML-ответе. Вместо этого первоначальный HTML содержит ссылки на другие ресурсы, такие как CSS и JavaScript, которые загружаются позже и вместе создают финальную страницу. Для обхода таких страниц используйте PuppeteerCrawler
или PlaywrightCrawler
.
После получения HTML-страницы, краулер передает его в Cheerio для парсинга. Результатом является типичная функция $
, которая должна быть знакома пользователям jQuery. Вы можете использовать функцию $
для различных операций поиска и манипуляций с HTML-кодом страницы, но при скрапинге вы в основном будете использовать ее для поиска определенных HTML-элементов и извлечения их данных.
Пример использования Cheerio и его функции $
в сравнении с браузерным JavaScript:
// Верните текстовое содержимое элемента <title>.
document.querySelector('title').textContent; // обычный JS
$('title').text(); // Cheerio
// Верните массив всех ссылок 'href' на странице.
Array.from(document.querySelectorAll('[href]')).map(el => el.href); // обычный JS
$('[href]')
.map((i, el) => $(el).attr('href'))
.get(); // Cheerio
Это не означает, что Cheerio лучше обычного браузерного JavaScript. Некоторые могут даже предпочесть более выразительный способ, который предоставляет обычный JS. К сожалению, методы браузерного JavaScript недоступны в Node.js, поэтому Cheerio - ваш лучший выбор для парсинга в Node.js.
Когда использовать CheerioCrawler
CheerioCrawler
особенно эффективен, когда необходимо справляться с очень большими нагрузками. Имея всего 4 ГБ памяти и одно ядро процессора, вы можете обрабатывать более 500 страниц в минуту! (при условии, что каждая страница содержит примерно 400 КБ HTML). Для достижения такой же скорости с полноценным браузерным скрапером, например PlaywrightCrawler
, потребовалось бы значительно больше вычислительной мощности.
Преимущества:
- Чрезвычайно быстрый и экономичный в работе
- Прост в настройке
- Знаком пользователям jQuery
- Автоматически обходит некоторые антискрапинг-защиты
Недостатки:
- Не работает с сайтами, требующими JavaScript-рендеринга
- Может легко перегрузить целевой сайт запросами
- Не позволяет манипулировать веб-страницей перед скрапингом
Примеры веб-скрапинга с Cheerio
Получение текстового содержимого элемента
Находит первый элемент <h2>
и возвращает его текстовое содержимое.
$('h2').text()
Поиск всех ссылок на странице
Этот код находит все элементы <a>
с атрибутом href
и извлекает их в массив.
$('a[href]')
.map((i, el) => $(el).attr('href'))
.get();
Другие примеры
Посетите раздел Примеры, чтобы ознакомиться с примерами использования CheerioCrawler
. Почти все примеры показывают код CheerioCrawler
в своих вкладках с кодом.