![3 примера как разобрать HTML-файл в Java используя Jsoup - 1]()
HTML это ядро WEB, все интернет-страницы которые Вы видите, являются ли они динамически сгенерированы средствами JavaScript, JSP, PHP, ASP или другими веб-технологиями, основаны на HTML. На самом деле, Ваш браузер разбирает HTML и отображает его в удобном для Вас виде. Но что делать если Вам нужно разобрать HTML-документ и найти в нем некоторый элемент, тэг, атрибут или проверить существует или нет конкретный элемент при помощи программы на Java.
Если бы Вы были Java программистом уже несколько лет, я уверен, Вы бы сделали XML разбор используя парсеры вроде DOM или SAX. Но, по иронии судьбы, бывают случаи, когда Вам необходимо разобрать HTML-документ из базового Java приложения, которое не содержит Servlet и другие Java веб-технологии. Более того, Core JDK также не содержит HTTP или HTML библиотек. Вот почему, когда дело доходит до разбора HTML файла, многие Java программисты спрашивают у Google, как получить значение HTML-тэга в Java.
Когда я столкнулся с этим, я был уверен что решением будет open-source библиотека, осуществляющая нужную мне функциональность, но я не знал, что она будет такой замечательной и многофункциональной как Jsoup. Она не только обеспечивает поддержку чтения и разбора HTML файлов, атрибутов, CSS классов в стиле JQuery, но и в то же время, позволяет модифицировать их. Используя Jsoup Вы можете сделать с HTML документом все что угодно.
В этой статье мы будем разбирать HTML файл и находить названия и атрибуты тэгов. Также мы разберем примеры скачивания и разбора HTML из файла и любого URL-адреса, например домашнюю страницу Google.
Что такое Jsoup
Jsoup это open-source Java библиотека для работы с реальным HTML. Она обеспечивает очень удобный API для извлечения и манипулирования данными, используя лучшие DOM, CSS, и JQuery-подобные методы. Jsoup реализует WHATWG HTML5 спецификацию, и разбирает HTML в ту же модель DOM, как это делают современные браузер вроде Chrome и Firefox.
Вот некоторые из полезных функций Jsoup библиотеки:
- Jsoup может очистить и разобрать HTML из URL, файла или строки.
- Jsoup может найти и извлечь данные используя обход DOM или CSS селекторы.
- Jsoup позволяет манипулировать HTML элементами, атрибутами и текстом.
- Jsoup обеспечивает очистку предоставленной пользователем информации по white-list, для предотвращения XSS атак.
- Также Jsoup выдает "аккуратный" HTML.
Jsoup предназначен для работы с различными видами HTML существующими в реальном мире, включая должным образом подтвержденный HTML c неполным неподтвержденным набором тэгов. Одно из основных преимуществ Jsoup это его надежность.
Разбор HTML в Java используя Jsoup
В этом учебнике мы увидим три различных примера разбора и обхода HTML-документа в Java используя Jsoup. В первом примере, мы будем разбирать HTML строку, содержащую тэги, в форме строкового литерала Java. Во втором примере, мы скачаем наш HTML-документ из интернет, и в третьем примере, мы загрузим для разбора наш собственный образец HTML файла login.html. Этот файл — образец HTML документа, который состоит из тэга "title" и тэга "div" в секции "body", который содержит HTML форму. В форме находятся поля для ввода имени пользователя и пароля, а также кнопки сброса и подтверждения для дальнейших действий. Это "правильный" HTML, который может пройти проверку на «валидность», то есть все тэги и атрибуты правильно закрыты. Вот как выглядит наш HTML файл:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<div id="login" class="simple" >
<form action="login.do">
Username : <input id="username" type="text" /><br>
Password : <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</form>
</div>
</body>
</html>
С помощью Jsoup очень просто разобрать HTML, все что Вам нужно это вызвать статический метод
Jsoup.parse() и передать в него Вашу HTML строку. Jsoup предоставляет несколько перегруженных методов
parse() для чтения HTML из строки, файла, из базового URI, из URL и из
InputStream. Вы также можете указать кодировку, для корректного чтения HTML файла, в случае если он не в формате "UTF-8".
Метод
parse(String html) разбирает входящий HTML в новый объект
Document. В Jsoup класс
Document наследует класс
Element, который расширяет класс
Node. Также от класса
Node наследуется класс
TextNode. До тех пор, пока Вы передаете в метод строку отличную от null, Вы гарантированно имеете успешный, осмысленный разбор, объект
Document содержащий (по крайней мере) элементы "head" и "body". Если у Вас есть объект
Document, Вы можете получить желаемые данные вызвав соответствующие методы класса
Document и его родителей
Element и
Node.