Парсинг 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 из-за выполнения скриптов.
- Подходит
Также в библиотеке
Авторизация и аутентификация в Swift: полное руководство для iOS/macOS
Кэширование в TypeScript: Redis, Memcached и in-memory решения
Мониторинг TypeScript-приложений: инструменты и библиотеки
Hangfire для C# (.NET): полное руководство с примерами
Работа с XML в C# (.NET): Полное руководство для начинающих