HTML — это ядро Интернета. Все страницы, которые вы видите в Интернете, созданы в формате HTML, независимо от того, генерируются ли они динамически с помощью JavaScript, JSP, PHP, ASP или других веб-технологий. Ваш браузер проанализирует HTML и отобразит его для вас. Но что, если вам нужно самостоятельно разобрать HTML-документ в программе на Java и найти определенные элементы, теги, атрибуты или проверить, существует ли определенный элемент? Если вы программируете на Java в течение многих лет, я считаю, что вы, должно быть, пробовали анализировать XML и использовали такие анализаторы, как DOM или SAX, но весьма вероятно, что вы никогда не выполняли работу по анализу HTML. Еще более иронично то, что в приложениях Java очень редко приходится анализировать HTML-документы, и это не касается сервлетов или других веб-технологий Java. Хуже всего то, что ядро JDK не включает библиотеки HTTP или HTML, по крайней мере, я о них не знаю. Вот почему, когда дело доходит до анализа HTML-файлов, многим Java-программистам приходится сначала обращаться к Google, чтобы узнать, как извлечь HTML-тег в Java. Когда у меня возникла такая необходимость, я верил, что найдутся какие-то библиотеки с открытым исходным кодом, которые смогут этого добиться, но я не ожидал, что появится такая классная и полнофункциональная библиотека, как JSoup. Он не только поддерживает чтение и анализ HTML-документов, но и позволяет извлекать любые элементы из HTML-файлов, а также их атрибуты и свойства CSS, а также их можно изменять. С помощью JSoup вы можете делать с HTML-документами практически все, что угодно. Мы увидим пример того, как загрузить и проанализировать HTML-файл с домашней страницы Google или любого URL-адреса на Java.
Что такое библиотека JSoup
Jsoup — это Java-библиотека с открытым исходным кодом, которую можно использовать для обработки HTML в практических приложениях. Он предоставляет очень удобный API для извлечения и изменения данных, в полной мере используя преимущества методов DOM, CSS и стиля jquery. Jsoup реализует спецификацию WAHTWG HTML5, и DOM, который он анализирует из HTML, точно такой же, как тот, который анализируется современными браузерами, такими как Chrome и Firefox. Вот некоторые полезные функции библиотеки Jsoup:
1.Jsoup может получать и анализировать HTML из URL, файла или строки.
2.Jsoup может находить и извлекать данные, используя обход DOM или селекторы CSS.
3. Вы можете использовать Jsoup для изменения элементов HTML, атрибутов и текста.
4.Jsoup гарантирует, что контент, отправленный пользователями, является чистым благодаря безопасному белому списку для предотвращения XSS-атак.
5.Jsoup также может выводить аккуратный HTML.
Jsoup предназначен для обработки всех видов HTML, которые встречаются в реальной жизни, включая правильный и действительный HTML, а также неполные и недействительные коллекции тегов. Одним из основных преимуществ Jsoup является его надежность.
Использование Jsoup для анализа HTML в Java
В этом руководстве по синтаксическому анализу HTML в Java мы увидим три различных примера использования Jsoup для анализа и перемещения HTML в Java. В первом примере мы будем анализировать строку HTML, содержимое которой представляет собой тег, состоящий из строковых литералов в Java. Во втором примере мы загрузим HTML-документ из Интернета, а в третьем примере мы загрузим образец HTML-файла login.html для анализа. Этот файл является примером HTML-документа. Он содержит тег заголовка и тег div внутри тела, которое содержит форму. Он имеет теги ввода для получения имен пользователей и паролей, а также кнопки отправки и сброса для следующего шага. Это правильный и валидный HTML, то есть все теги и атрибуты закрыты корректно. Вот наш пример HTML-файла:
Скопируйте код кода следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<голова>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Страница входа</title>
</голова>
<тело>
<div id="логин" >
<form action="login.do">
Имя пользователя: <input id="username" type="text" /><br>
Пароль: <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</форма>
</div>
</тело>
</html>
Использовать Jsoup для анализа HTML очень просто, вам просто нужно вызвать его статический метод Jsoup.parse() и передать ему свою HTML-строку. Jsoup предоставляет несколько перегруженных методов parse(), которые могут читать HTML-файлы из строк, файлов, URI, URL-адресов и даже входных потоков. Если это не кодировка UTF-8, вы также можете указать кодировку символов, чтобы файл HTML можно было правильно прочитать. Ниже приведен полный список методов анализа HTML в библиотеке Jsoup. Метод parse(String html) анализирует входной HTML в новый документ. В Jsoup Document наследуется от Element, который, в свою очередь, наследуется от Node. Тот же TextNode также наследуется от Node. Пока вы передаете ненулевую строку, вы обязательно получите успешный и содержательный анализ и получите документ, содержащий элементы заголовка и тела. Получив этот документ, вы можете вызвать соответствующие методы документа и его родительских классов Element и Node, чтобы получить нужные данные.
Java-программа, анализирующая HTML-документы.
Ниже представлена полная Java-программа, которая анализирует строки HTML, файлы HTML, загруженные из Интернета, и файлы HTML в локальной файловой системе. Вы можете использовать Eclipse IDE или другую IDE или даже команды для запуска этой программы. В Eclipse это очень просто. Просто скопируйте этот код, создайте новый проект Java, щелкните правой кнопкой мыши пакет src и вставьте его. Eclipse создаст правильный пакет и исходный файл Java с тем же именем, поэтому рабочая нагрузка будет минимальной. Если у вас уже есть пример проекта Java, потребуется только один шаг. Следующая программа Java показывает три различных примера анализа и перемещения HTML-файлов. В первом примере мы напрямую анализируем строку с содержимым HTML, во втором примере мы анализируем HTML-файл, загруженный по URL-адресу, а в третьем примере мы загружаем HTML-документ из локальной файловой системы и анализируем его. Метод синтаксического анализа используется как в первом, так и в третьем примерах для получения объекта Document, который вы можете запросить для извлечения любого значения тега или значения атрибута. Во втором примере мы используем метод Jsoup.connect, который создаст URL-соединение, загрузит HTML и проанализирует его. Этот метод также вернет документ, который можно использовать для последующих запросов и получения значения тега или атрибута.
Скопируйте код кода следующим образом:
импортировать java.io.IOException;
импортировать org.jsoup.Jsoup;
импортировать org.jsoup.nodes.Document;
импортировать org.jsoup.nodes.Element;
/**
[*] Java-программа для анализа/чтения HTML-документов из файла с использованием библиотеки Jsoup.
[*] Jsoup — это библиотека с открытым исходным кодом, которая позволяет разработчику Java анализировать HTML.
[*] файлы и извлечение элементов, манипулирование данными, изменение стиля с помощью DOM, CSS и
[*] JQuery-подобный метод.
[*]
[*] @author Джавин Пол
[*]/
общественный класс HTMLParser{
public static void main(String args[]) {
// Анализ HTML-строки с использованием библиотеки JSoup
Строка HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<голова>"
+ "<title>Пример JSoup</title>"
+ "</head>"
+ "<тело>"
+ "|[b]HelloWorld[/b]"
+ ""
+ "</body>"
+ "</html>";
Документ html = Jsoup.parse(HTMLSTring);
Строка title = html.title();
Строка h1 = html.body().getElementsByTag("h1").text();
System.out.println("Введите строку HTML в JSoup:" + HTMLSTring);
System.out.println("После анализа Title: " + title);
System.out.println("После анализа заголовок: " + h1);
// Пример JSoup 2. Чтение HTML-страницы по URL-адресу
Документ-документ;
пытаться {
doc = Jsoup.connect("http://google.com/").get();
заголовок = документ.заголовок();
} catch (IOException e) {
е.printStackTrace();
}
System.out.println("Jsoup может читать HTML-страницу по URL-адресу, title: " + title);
// Пример JSoup 3. Анализ HTML-файла в Java
//Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // неправильно
Документ htmlFile = null;
пытаться {
htmlFile = Jsoup.parse(новый файл("login.html"), "ISO-8859-1");
} catch (IOException e) {
// TODO Автоматически сгенерированный блок catch
е.printStackTrace();
} // верно
заголовок = htmlFile.title();
Элемент div = htmlFile.getElementById("login");
String cssClass = div.className() // получение HTML-элемента формы класса
System.out.println("Jsoup также может напрямую анализировать HTML-файл");
System.out.println("title: " + title);
System.out.println("класс тега div: " + cssClass);
}
}
Выход:
Скопируйте код кода следующим образом:
Введите HTML-строку в JSoup: <!DOCTYPE html><html><head><title>Пример JSoup</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
После анализа заголовок: Пример JSoup.
После парсинга, Рубрика: HelloWorld
Jsoup может читать HTML-страницу по URL-адресу, заголовок: Google
Jsoup также может анализировать заголовок HTML-файла: Страница входа.
класс тега div: простой
Преимущество Jsoup в том, что он очень надежный. Анализатор HTML Jsoup будет анализировать предоставленный вами HTML-код настолько чисто, насколько это возможно, независимо от того, правильно ли он сформирован. Он может обрабатывать такие ошибки, как незакрытые теги (например, от Java <p>Scala до <p>JavaScala), неявные теги (например, пустой |Java is Great, завернутый в |), и он всегда может создать структуру документа (HTML). включая голову и тело, а в голову будут включены только правильные элементы). Вот как HTML анализируется в Java. Jsoup — это отличная и надежная библиотека с открытым исходным кодом, которая позволяет очень легко читать HTML-документы, фрагменты тела, строки HTML и анализировать HTML-контент непосредственно из Интернета. В этой статье мы узнали, как получить определенный тег HTML в Java, поскольку в первом примере мы извлекли значение тегов title и H1 в текст, а в третьем примере мы узнали, как получить его с помощью извлечения свойств CSS для получить значения свойств из HTML-тегов. В дополнение к мощному методу html.body().getElementsByTag("h1").text() в стиле jQuery вы также можете извлекать произвольные теги HTML, а также предоставляет такие функции, как Document.title() и Element.className( ) Удобный метод, можно быстро получить заголовок и CSS-класс. Надеюсь, вам понравится JSoup, и вскоре мы увидим еще несколько примеров этого API.