Cheerio парсинг: jQuery-подобный разбор HTML в Node

Cheerio — быстрый парсер HTML в Node.js без браузера. Когда его хватает вместо Puppeteer и как стыковать с HTTP-клиентом.

← Все статьи

cheerio парсинг

Cheerio парсинг — разбор HTML в Node.js API, похожим на jQuery, без запуска браузера. Как и Beautiful Soup, сам в сеть не ходит: нужен fetch/axios. Для SPA — Puppeteer или Playwright. Ниже — задачи, код и таблицы.

cheerio парсинг

Кратко

  • Cheerio = серверный HTML-парсер для Node без JS-рендера.
  • Идеален для статичных страниц, SSR и HTML-дампов.
  • Часто ставят после Puppeteer: content → Cheerio.
  • Очереди и ретраи — сами или через Crawlee.
  • Селекторы хрупки к редизайну.
cheerio парсинг

Инфографика: строка HTML → CSS-селекторы Cheerio → строки данных.

Типовые задачи

ЗадачаПодходСложностьКогда не подходит
Парсинг SSR-каталогаfetch + cheerio.loadНизкаяПустой клиентский DOM
Разбор после Puppeteerpage.content() → cheerioНизкая
Батч из файлов HTMLfs.readFile + cheerioНизкая
Долгий краул с ретраямиCrawlee CheerioCrawlerСредняяГолый цикл без очереди

Пример кода: fetch + селекторы

import * as cheerio from "cheerio";

async function scrape(url) {
  const res = await fetch(url, {
    headers: { "User-Agent": "ResearchBot/1.0" },
  });
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const html = await res.text();
  const $ = cheerio.load(html);

  return $(".product-card")
    .map((_, el) => ({
      title: $(el).find("h2").text().trim(),
      price: $(el).find(".price").text().trim(),
      href: $(el).find("a").attr("href") ?? "",
    }))
    .get();
}

scrape("https://example.com/catalog").then(console.log);

Когда подходит

  1. Стек Node/TypeScript, данные в HTML ответа.
  2. Нужна скорость на тысячах простых страниц.
  3. Команда привыкла к CSS/jQuery-селекторам.
  4. Бюджет не тянет пул headless-браузеров.
  5. Есть стабильные селекторы или микроразметка.

Сравнение

КритерийCheerioBeautiful SoupPuppeteer
ЯзыкNode.jsPythonNode.js
JS-рендерНетНетДа
СкоростьВысокаяВысокаяНизкая–средняя
DX селекторовjQuery-likePythonicDOM в браузере

Ограничения

Cheerio не исполняет скрипты. Пустой #app — признак клиентского рендера. Для e-com мониторинга часто выгоднее парсинг интернет-магазина.

Когда не подходит

Тяжёлый SPA — браузерный стек. Python-краул — Scrapy. Платформа акторов — Apify / Crawlee.

FAQ

Cheerio — это jQuery?

Нет. Отдельная библиотека с похожим API на сервере.

Нужен ли jsdom?

Для извлечения полей обычно нет.

Как масштабировать?

Очередь, лимиты RPS; при росте — Crawlee.

Заказной парсинг: парсинг сайтов. Серия: Puppeteer, Crawlee.