Парсинг HTML с Java и Jsoup

Как разобрать HTML с помощью Java и Jsoup

With Jsoup, я могу эффективно извлекать нужную мне информацию с веб-страниц и выполнять различные задачи. Простота и гибкость библиотеки позволяют мне сосредоточиться на сути задачи, не увязая в сложном коде. Будь то сбор данных или запуск тестов, Jsoup — надежный выбор, который делает работу с HTML простой и понятной.

Альтернативы парсингу HTML с Jsoup

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

Я бы рекомендовал использовать Яркие данные или ScrapingBee для масштабных задач. Я не связан ни с одним из них.

Что такое Jsoup?

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

Ключевые возможности Jsoup

  • Парсинг и очистка HTML из URL, файлов или строк.
  • Извлекайте данные с помощью обхода DOM-дерева или CSS-подобных селекторов.
  • Изменение HTML-контента.
  • Автоматическая очистка непроверенного HTML.
  • Поддерживает cookies, POST-запросы и работу с сессиями.

Setting Up Jsoup

Before we dive into the code, you’ll need to add Jsoup to your project. If you’re using Maven, include the following dependency in your pom.xml:

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version> <! - Check for the latest version →
</dependency>

For Gradle, add this to your build.gradle:

implementation 'org.jsoup:jsoup:1.15.3'

В качестве альтернативы вы можете вручную скачать JAR-файл с сайта Jsoup и добавить его в свой проект.

Базовый парсинг HTML с Jsoup

Let’s begin with a simple example of parsing an HTML document. Consider the following HTML snippet:

<html>
<head>
<title>Образец страницы</title>
</head>
<тело>
<h1>Привет, мир!</h1>
<p>Это пример абзаца.</p>
</тело>
</html>

Чтобы разобрать этот HTML в Java с помощью Jsoup, можно написать следующий код:

импорт org.jsoup.Jsoup;
импорт org.jsoup.nodes.Document;
public класс HTMLParserExample {
public static void главная(String[] args) {
String html = "<html><head><title>\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/title><\/head>"
+ "<body><h1>\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!<\/h1><p>\u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u0431\u0437\u0430\u0446\u0430.<\/p><\/body><\/html>";
Document документ = Jsoup.parse(html);
System.out.println("Title: " + document.title());
System.out.println("Заголовок: " + document.select("h1").text());
System.out.println("Абзац: " + document.select("p").text());
}
}

Парсинг HTML-файла

Jsoup также может загружать и разбирать HTML-файл из локальной файловой системы. Например:

импорт org.jsoup.Jsoup;
импорт org.jsoup.nodes.Document;
импорт java.io.File;
импорт java.io.IOException;
public класс HTMLFileParser {
public static void главная(String[] args) throws IOException {
File input = новый File("path/to/your/file.html");
Document документ = Jsoup.parse(input, "UTF-8");
System.out.println("Title: " + document.title());
}
}

Получение и парсинг HTML по URL

Один из распространенных сценариев — загрузка и парсинг HTML-документа по URL. Это часто используется в Веб-скрейпинг и автоматизация: applications.

импорт org.jsoup.Jsoup;
импорт org.jsoup.nodes.Document;
импорт java.io.IOException;
public класс URLParserExample {
public static void главная(String[] args) throws IOException {
String url = "https://example.com";
Document документ = Jsoup.connect(url).get();
System.out.println("Title: " + document.title());
System.out.println("Первый абзац: " + document.select("p").first().text());
}
}

Извлечение данных с помощью селекторов

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

For example, to extract all links (<a> tags) and their href attributes from a webpage:

импорт org.jsoup.Jsoup;
импорт org.jsoup.nodes.Document;
импорт org.jsoup.nodes.Element;
импорт org.jsoup.select.Elements;
импорт java.io.IOException;
public класс LinkExtractor {
public static void главная(String[] args) throws IOException {
String url = "https://example.com";
Document документ = Jsoup.connect(url).get();
Elements links = document.select("a[href]"); // Select all <a> tags with href attribute
для (Element link : links) {
System.out.println("Ссылка: " + link.attr("href"));
System.out.println("Текст: " + link.text());
}
}
}

Manipulating HTML Elements

Jsoup также позволяет изменять HTML-контент: добавлять или удалять элементы, менять атрибуты или править текстовое содержимое. Например, чтобы изменить текст внутри абзаца:

импорт org.jsoup.Jsoup;
импорт org.jsoup.nodes.Document;
public класс HTMLManipulationExample {
public static void главная(String[] args) {
String html = "<html><body><p>Original Text<\/p><\/body><\/html>";
Document документ = Jsoup.parse(html);
document.select("p").first().text("Обновлённый текст");
System.out.println(document.html());
}
}

Cleaning HTML Content

Если вам нужно очистить HTML, Jsoup предоставляет методы для удаления нежелательных тегов, атрибутов или элементов, что делает ее полезной для валидации входных данных или фильтрации контента.

импорт org.jsoup.Jsoup;
импорт org.jsoup.safety.Whitelist;
public класс HTMLCleanerExample {
public static void главная(String[] args) {
String dirtyHtml = "<p>\u042d\u0442\u043e <script>alert('unsafe')<\/script> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/p>";
String cleanHtml = Jsoup.clean(dirtyHtml, Whitelist.basic());
System.out.println("Очищенный HTML: " + cleanHtml);
}
}

Заключение

Jsoup — универсальный и эффективный инструмент для парсинга, преобразования и извлечения данных из HTML-документов в Java. Благодаря простому API и мощным возможностям селекторов в стиле CSS он широко используется для веб-скрейпинга, извлечения данных и обработки контента.

Следуя шагам и примерам из этого руководства, вы сможете эффективно начать работать с HTML-контентом. Будь то сложные проекты веб-скрапинга или простые задачи по работе с документами, Jsoup предлагает гибкость и производительность, чтобы справиться с ними.

Похожие записи