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-документа
Вот наша полная Java-программа для анализа строки HTML, файла HTML, загруженного из Интернета, и файла HTML из локальной файловой системы. Чтобы запустить эту программу, вы можете использовать Eclipse IDE или просто использовать любую IDE или командную строку . В Eclipse это очень просто, просто скопируйте этот код, создайте новый проект Java, щелкните правой кнопкой мыши на пакете src и вставьте его. Eclipse позаботится о создании правильного пакета и исходного файла Java с тем же именем, так что абсолютно меньше работы. Если у вас уже есть пример проекта Java, то это всего лишь один шаг. Следующая Java-программа показывает 3 примера анализа и обхода HTML-файла. В первом примере мы непосредственно анализируем строку с содержимым html , во втором примере мы анализируем файл HTML, загруженный с URL-адреса, в третьем примере мы загружаем и анализируем документ 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 Example Afte parsing, Heading : HelloWorld Jsoup Can read HTML page from URL, title : Google Jsoup can also parse HTML file directly title : Login Page class 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 . |