Парсинг HTML в Node.js: библиотеки Cheerio, JSDOM и Puppeteer

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Парсинг HTML в JavaScript (Node.js): полное руководство

Парсинг HTML — один из ключевых навыков современного веб-разработчика. В экосистеме Node.js существует несколько мощных инструментов для извлечения данных из HTML-документов. В этой статье мы подробно разберём три основные библиотеки: Cheerio, JSDOM и Puppeteer, а также научимся выбирать подходящий инструмент под конкретную задачу.

1. Cheerio — лёгкий и быстрый парсер

Cheerio — это быстрая, гибкая и лёгкая библиотека, реализующая подмножество jQuery для серверной стороны. Она идеально подходит для парсинга статического HTML, когда не требуется выполнение JavaScript на странице.

Установка

npm install cheerio

Пример использования

const cheerio = require('cheerio');
const axios = require('axios');

async function parseHTML() {
    const response = await axios.get('https://example.com');
    const $ = cheerio.load(response.data);
    
    // Извлечение заголовка страницы
    const title = $('title').text();
    console.log('Заголовок:', title);
    
    // Получение всех ссылок
    const links = [];
    $('a').each((i, el) => {
        links.push($(el).attr('href'));
    });
    console.log('Ссылки:', links);
    
    // Парсинг таблицы
    const tableData = [];
    $('table tr').each((i, row) => {
        const cells = [];
        $(row).find('td, th').each((j, cell) => {
            cells.push($(cell).text().trim());
        });
        tableData.push(cells);
    });
    console.log('Данные таблицы:', tableData);
}

parseHTML().catch(console.error);

Преимущества Cheerio

  • Высокая производительность — работает до 8 раз быстрее аналогов
  • Знакомый jQuery-синтаксис
  • Низкое потребление памяти
  • Простая установка и настройка

Недостатки

  • Не поддерживает динамический контент
  • Не может выполнять JavaScript
  • Не подходит для SPA-приложений

2. JSDOM — полноценная DOM-реализация

JSDOM эмулирует окружение браузера в Node.js, предоставляя полноценную реализацию DOM и HTML-парсера. В отличие от Cheerio, JSDOM может выполнять JavaScript, что делает его подходящим для парсинга страниц с динамическим контентом.

Установка

npm install jsdom

Пример использования

const { JSDOM } = require('jsdom');
const axios = require('axios');

async function parseWithJSDOM() {
    const response = await axios.get('https://example.com');
    const dom = new JSDOM(response.data);
    const document = dom.window.document;
    
    // Получение всех параграфов
    const paragraphs = Array.from(document.querySelectorAll('p'))
        .map(p => p.textContent);
    console.log('Параграфы:', paragraphs);
    
    // Работа с атрибутами
    const images = Array.from(document.querySelectorAll('img'))
        .map(img => ({
            src: img.getAttribute('src'),
            alt: img.getAttribute('alt')
        }));
    console.log('Изображения:', images);
    
    // Выполнение скриптов (осторожно!)
    const { window } = new JSDOM(`<body>
        <script>
            document.body.innerHTML += '<p>Динамический контент</p>';
        </script>
    </body>`, { runScripts: 'dangerously' });
    
    console.log(window.document.body.innerHTML);
}

parseWithJSDOM().catch(console.error);

Преимущества JSDOM

  • Полная поддержка DOM API
  • Возможность выполнения JavaScript
  • Поддержка современных веб-стандартов
  • Совместимость с браузерными библиотеками

Недостатки

  • Более медленный по сравнению с Cheerio
  • Потребляет больше памяти
  • Сложнее в настройке

3. Puppeteer — браузерная автоматизация

Puppeteer — это библиотека для управления браузером Chrome/Chromium через DevTools Protocol. Она позволяет парсить страницы, которые требуют полной эмуляции браузера, включая выполнение сложных JavaScript-скриптов и обработку AJAX-запросов.

Установка

npm install puppeteer

Пример использования

const puppeteer = require('puppeteer');

async function                    

Рекомендаций