Як парсити HTML за допомогою Java та Jsoup
With Jsoup, я можу ефективно витягувати потрібну мені інформацію з вебсторінок і виконувати різні завдання. Простота й гнучкість бібліотеки дають мені змогу зосередитися на суті мого завдання, не відволікаючись на складний код. Чи займаюся я вебскрапінгом, чи запускаю тести, Jsoup є надійним вибором, що спрощує роботу з HTML.
Альтернативи розбору HTML за допомогою Jsoup
У деяких випадках ми можемо обійтися без самостійного вебскрапінгу чи парсингу даних. Погляньте на мій список найкращих інструментів для вебскрапінгу, можливо, ви знайдете ідеальне рішення для себе або свого бізнесу.
Я б радив використовувати Bright Data or 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>Sample Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>Це приклад абзацу.</p>
</body>
</html>
Щоб розібрати цей HTML у Java за допомогою Jsoup, можна написати такий код:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HTMLParserExample {
public static void main(String[] args) {
String html = "<html><head><title>Sample Page<\/title><\/head>"
+ "<body><h1>Hello, World!<\/h1><p>\u0426\u0435 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u0430\u0431\u0437\u0430\u0446\u0443.<\/p><\/body><\/html>";
Document 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-файл із вашої локальної файлової системи. Наприклад:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
public class HTMLFileParser {
public static void main(String[] args) throws IOException {
File input = new File("path/to/your/file.html");
Document document = Jsoup.parse(input, "UTF-8");
System.out.println("Title: " + document.title());
}
}
Отримання та розбір із URL-адреси
Поширений сценарій використання — отримання та парсинг HTML-документа за URL. Це часто використовується в вебскрапінг applications.
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class URLParserExample {
public static void main(String[] args) throws IOException {
String url = "https://example.com";
Document 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:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class LinkExtractor {
public static void main(String[] args) throws IOException {
String url = "https://example.com";
Document document = Jsoup.connect(url).get();
Elements links = document.select("a[href]"); // Select all <a> tags with href attribute
for (Element link : links) {
System.out.println("Посилання: " + link.attr("href"));
System.out.println("Текст: " + link.text());
}
}
}
Manipulating HTML Elements
Jsoup також дає змогу змінювати HTML-вміст, наприклад додавати або видаляти елементи, змінювати атрибути чи редагувати текстовий вміст. Наприклад, щоб змінити текст усередині абзацу:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HTMLManipulationExample {
public static void main(String[] args) {
String html = "<html><body><p>Original Text<\/p><\/body><\/html>";
Document document = Jsoup.parse(html);
document.select("p").first().text("Оновлений текст");
System.out.println(document.html());
}
}
Cleaning HTML Content
У випадках, коли потрібно санітизувати або очистити HTML, Jsoup надає методи для видалення небажаних тегів, атрибутів або елементів, що робить його корисним для валідації введення або фільтрації вмісту.
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;
public class HTMLCleanerExample {
public static void main(String[] args) {
String dirtyHtml = "<p>This is <script>alert('unsafe')<\/script> content<\/p>";
String cleanHtml = Jsoup.clean(dirtyHtml, Whitelist.basic());
System.out.println("Очищений HTML: " + cleanHtml);
}
}
Conclusion
Jsoup — це універсальний і ефективний інструмент для парсингу, редагування та витягування даних із HTML-документів у Java. Завдяки простому API та потужним можливостям CSS-подібних селекторів його широко використовують для вебскрапінгу, витягування даних і роботи з вмістом.
Дотримуючись кроків і прикладів у цьому посібнику, ви можете почати ефективно парсити та працювати з HTML-вмістом. Незалежно від того, чи потрібно вам обробляти складні проєкти вебскрапінгу, чи виконувати прості завдання з маніпулювання документами, Jsoup пропонує гнучкість і продуктивність, щоб впоратися з роботою.

