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

Руководство по 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 в своих вкладках с кодом.