HTML является ядром Интернета, все страницы, которые вы видите в Интернете, основаны на HTML, независимо от того, генерируются ли они динамически с помощью JavaScript, JSP, PHP, ASP или любых других веб-технологий. Ваш браузер фактически анализирует HTML и отображает его для вас. Но что вы делаете, если вам нужно проанализировать HTML-документ и найти некоторые элементы, теги, атрибуты или проверить, существует ли конкретный элемент или нет, и все это с помощью программы на Java.
Если вы занимались программированием на Java в течение нескольких лет, я уверен, что вы проделали некоторую работу по синтаксическому анализу XML с использованием таких анализаторов, как DOM и SAX . По иронии судьбы, есть несколько случаев, когда вам нужно проанализировать HTML-документ из основного приложения Java, которое не включает сервлет и другие веб-технологии Java. Что еще хуже, в ядре JDK также нет библиотеки HTTP или HTML. Вот почему, когда дело доходит до парсинга HTML-файла , многим Java-программистам приходилось смотреть в Google, чтобы узнать, как получить значение HTML-тега в Java.
Когда я нуждался в этом, я был уверен, что будет библиотека с открытым исходным кодом, которая будет реализовывать эту функциональность для меня, но не знал, что это было бы так же прекрасно и многофункционально, как JSoup . Он не только поддерживает чтение и анализ документа HTML, но также позволяет извлекать любые элементы из файла HTML, их атрибуты, их класс CSS в стиле JQuery и в то же время позволяет изменять их. Вы, вероятно, можете сделать что-нибудь с документом HTML, используя Jsoup.
В этой статье мы разберем и HTML-файл, и выясним значение тегов заголовка и заголовка. Мы также увидим примеры загрузки и анализа HTML из файла, а также любого URL-адреса или Интернета путем анализа домашней страницы Google на Java.
Что такое библиотека JSoup
Jsoup — это библиотека Java с открытым исходным кодом для работы с реальным HTML. Он предоставляет очень удобный API для извлечения и обработки данных, используя лучшие методы DOM, CSS и jquery-подобные. Jsoup реализует спецификацию WHATWG HTML5 и анализирует HTML в том же DOM, что и современные браузеры, такие как Chrome и Firefox. Вот некоторые полезные функции библиотеки jsoup:
- Jsoup может очищать и анализировать HTML из URL, файла или строки
- Jsoup может найти и извлечь данные, используя обход DOM или селекторы CSS
- Jsoup позволяет вам манипулировать HTML-элементами, атрибутами и текстом
- Jsoup предоставляет чистый пользовательский контент для безопасного белого списка, чтобы предотвратить атаки XSS
- Jsoup также выводит HTML
Jsoup предназначен для работы с различными типами HTML, встречающимися в реальном мире, которые включают в себя надлежащим образом проверенный HTML для неполной коллекции неподтвержденных тегов. Одним из основных достоинств Jsoup является то, что он очень прочный.
Разбор HTML в Java с использованием JSoup
В этом руководстве по анализу HTML в Java мы увидим три различных примера анализа и обхода HTML-документов в Java с использованием jsoup. В первом примере мы проанализируем строку HTML , содержимое которой представляет собой все теги, в форме литерала строки в Java. Во втором примере мы загрузим наш HTML-документ из Интернета, а в третьем примере мы загрузим наш собственный пример HTML-файла login.html для анализа. Этот файл является примером HTML-документа, который содержит тег title и div в разделе body, который содержит форму HTML. Он имеет входные теги для ввода имени пользователя и пароля и кнопку отправки и сброса для дальнейших действий. Это правильный HTML, который можно проверить, т.е. все теги и атрибуты правильно закрыты. Вот как выглядит наш пример HTML-файла:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<!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-файлов из String, File, из базового URI, из URL-адреса и из InputStream. Вы также можете указать кодировку символов для правильного чтения файлов HTML, если они не в формате «UTF-8».
Метод parse (String html) анализирует входной HTML в новый документ. В Jsoup Document расширяет элемент, который расширяет узел. Также TextNode расширяет узел. Пока вы передаете ненулевую строку , вы гарантированно будете иметь успешный, разумный анализ, с документом, содержащим (как минимум) заголовок и элемент тела. Получив Document, вы можете получить нужные данные, вызвав соответствующие методы в Document и его родительских классах Element и Node.
Java-программа для анализа HTML-документа

|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import java.io.File;import java.io.IOException; import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element; /*** Java Program to parse/read HTML documents from File using Jsoup library.* Jsoup is an open source library which allows Java developer to parse HTML* files and extract elements, manipulate data, change style using DOM, CSS and* JQuery like method.** @author Javin Paul*/public class HTMLParser{ public static void main(String args[]) { // Parse HTML String using JSoup library String HTMLSTring = "<!DOCTYPE html>" + "<html>" + "<head>" + "<title>JSoup Example</title>" + "</head>" + "<body>" + "<table><tr><td><h1>HelloWorld</h1></tr>" + "</table>" + "</body>" + "</html>"; Document html = Jsoup.parse(HTMLSTring); String title = html.title(); String h1 = html.body().getElementsByTag("h1").text(); System.out.println("Input HTML String to JSoup :" + HTMLSTring); System.out.println("After parsing, Title : " + title); System.out.println("Afte parsing, Heading : " + h1); // JSoup Example 2 - Reading HTML page from URL Document doc; try { title = doc.title(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Jsoup Can read HTML page from URL, title : " + title); // JSoup Example 3 - Parsing an HTML file in Java //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong Document htmlFile = null; try { htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // right title = htmlFile.title(); Element div = htmlFile.getElementById("login"); String cssClass = div.className(); // getting class form HTML element System.out.println("Jsoup can also parse HTML file directly"); System.out.println("title : " + title); System.out.println("class of div tag : " + cssClass); } } |
|
1
2
3
4
5
6
7
8
|
Output:Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>After parsing, Title : JSoup ExampleAfte parsing, Heading : HelloWorldJsoup Can read HTML page from URL, title : GoogleJsoup can also parse HTML file directlytitle : Login Pageclass of div tag : simple |
Синтаксический анализатор Jsoup HTML будет прилагать все усилия для создания чистого анализа из предоставленного вами HTML-кода независимо от того, является ли HTML корректным или нет. Может обрабатывать следующие ошибки:
незакрытые теги (например, <p> Java <p> Scala to <p> Java </ p> <p> Scala </ p>)
неявные теги (например, голая <td> Java is Great </ td> упакована в <table> <tr> <td>)
надежное создание структуры документа (html, содержащий заголовок и тело, и только соответствующие элементы внутри заголовка).
Jsoup — это отличная и надежная библиотека с открытым исходным кодом, которая делает чтение HTML-документов, фрагментов тела, HTML-строк и прямой анализ HTML-содержимого из Интернета чрезвычайно простым.
| Ссылка: | 3 Примеры парсинга HTML-файла в Java с использованием Jsoup от нашего партнера по JCG Явина Пола в блоге Javarevisited . |