Парсинг HTML в Java: лучшие библиотеки и примеры кода

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

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

Начать курс

Парсинг HTML в Java: обзор библиотек и практические примеры

Парсинг HTML (извлечение данных из веб-страниц) — одна из ключевых задач в современной разработке. Java предоставляет мощные инструменты для этой цели. В данной статье мы рассмотрим три популярные библиотеки: Jsoup, HtmlUnit и Apache Tika. Вы узнаете, как их установить, какие задачи они решают, и увидите рабочие примеры кода.

Зачем нужен парсинг HTML?

Парсинг HTML используется для:

  • Сбора данных с веб-сайтов (цены, новости, контакты).
  • Тестирования веб-приложений (извлечение элементов интерфейса).
  • Автоматизации рутинных операций (заполнение форм, проверка ссылок).
  • Анализа SEO-структуры сайтов.

1. Jsoup — самый популярный парсер HTML для Java

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

Установка (Maven)

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.17.2</version>
</dependency>

Пример: извлечение заголовков всех новостей

Допустим, нам нужно получить все заголовки статей с новостного портала. Используем CSS-селектор h2.news-title.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        // Загружаем HTML-страницу
        Document doc = Jsoup.connect("https://example.com/news")
                            .userAgent("Mozilla/5.0")
                            .timeout(5000)
                            .get();

        // Извлекаем все элементы h2 с классом "news-title"
        Elements titles = doc.select("h2.news-title");

        // Выводим текст каждого заголовка
        for (var title : titles) {
            System.out.println(title.text());
        }
    }
}

Особенности Jsoup:

  • Работает без браузера, только HTTP-запросы.
  • Поддержка CSS-селекторов (как в jQuery).
  • Возможность манипуляции DOM (добавление, удаление элементов).
  • Не умеет выполнять JavaScript.

2. HtmlUnit — парсинг с поддержкой JavaScript

HtmlUnit — это эмулятор браузера на Java. Он не просто парсит HTML, а полностью обрабатывает страницу: выполняет JavaScript, загружает CSS, обрабатывает AJAX-запросы. Идеально подходит для современных SPA-сайтов (React, Angular).

Установка (Maven)

<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.70.0</version>
</dependency>

Пример: получение данных после загрузки JavaScript

Предположим, на странице есть динамический блок, который появляется через 2 секунды после загрузки. HtmlUnit дождётся его.

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlElement;

public class HtmlUnitExample {
    public static void main(String[] args) throws Exception {
        try (WebClient webClient = new WebClient()) {
            // Отключаем CSS и логирование для скорости
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setJavaScriptEnabled(true);

            // Загружаем страницу
            HtmlPage page = webClient.getPage("https://example.com/dynamic");

            // Ждём выполнения JavaScript (максимум 5 сек)
            webClient.waitForBackgroundJavaScript(5000);

            // Извлекаем элемент по XPath
            HtmlElement element = page.getFirstByXPath("//div[@id='dynamic-content']");
            if (element != null) {
                System.out.println("Содержимое: " + element.asNormalizedText());
            }
        }
    }
}

Особенности HtmlUnit:

  • Полноценная эмуляция браузера (поддержка JS, AJAX).
  • Работа с XPath и CSS-селекторами.
  • Медленнее Jsoup из-за выполнения скриптов.
  • Подходит

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