Автор оригинала: Pankaj Kumar.
jsoup-это синтаксический анализатор Java HTML с открытым исходным кодом, который мы можем использовать для анализа HTML и извлечения полезной информации. Вы также можете рассматривать soup как инструмент для очистки веб – страниц на языке программирования java.
jsoup
API jsoup можно использовать для извлечения HTML-кода из URL-адреса или его анализа из HTML-строки или из HTML-файла.
Некоторые из интересных функций API jsoup являются;
- удалите HTML-код из URL-адреса или прочитайте его из строки или из файла.
- Извлекайте данные из html с помощью обхода на основе DOM или с помощью CSS, таких как селекторы.
- API jsoup также можно использовать для редактирования HTML.
- API jsoup самодостаточен, нам не нужны никакие другие банки для его использования.
Вы можете скачать jsoup jar с его веб-сайта или, если вы используете maven, добавьте для него зависимость ниже.
org.jsoup jsoup 1.8.1
Давайте рассмотрим различные функции jsoup одну за другой.
пример jsoup для загрузки HTML-документа с URL-адреса
Мы можем сделать это с помощью однострочного кода, как показано ниже.
org.jsoup.nodes.Document doc = org.jsoup.Jsoup.connect("https://www.journaldev.com").get(); System.out.println(doc.html()); // prints HTML data
пример jsoup для анализа HTML-документа из строки
Если у нас есть HTML-данные в виде строки, мы можем использовать приведенный ниже код для их анализа.
String source = "Jsoup Example " + "Welcome to JournalDev!!
" + ""; Document doc = Jsoup.parse(source);
пример jsoup для загрузки документа из файла
Если данные HTML сохранены в файле, мы можем загрузить их, используя приведенный ниже код.
Document doc = Jsoup.parse(new File("data.html"), "UTF-8");
Разбор фрагмента HTML-текста
Одна из лучших особенностей jsoup заключается в том, что если мы предоставляем фрагментированные данные html-кода, он изо всех сил пытается создать для нас допустимый HTML-код, как показано в приведенном ниже примере.
String html = "Test Data
"; Document doc1 = Jsoup.parseBodyFragment(html); System.out.println(doc1.html());
Приведенный выше код выводит следующий HTML-код.
Test Data
Давайте теперь рассмотрим различные методы извлечения данных из HTML.
Методы Jsoup DOM
Так же, как и HTML, Jsoup анализирует HTML в документе. Документ состоит из различных элементов, и существует множество полезных методов, которые мы можем использовать для поиска элементов. Некоторые из этих методов в документе являются;
- getElementById(строковый идентификатор)
- getElementsByTag(Строковый тег)
- getElementsByClass(Строковое имя класса)
- Атрибут getElementsByAttribute(строковый ключ)
- элементы-братья(), первый элемент-брат(), последний элемент-брат() и т.д.
Элемент имеет разные атрибуты, поэтому у нас также есть некоторые методы для данных элемента.
- attr(строковый ключ) для получения и attr(строковый ключ, строковое значение) для установки атрибутов
- идентификатор(), имя класса() и имена классов()
- текст() для получения и текст(строковое значение) для задания текстового содержимого
- html() для получения и html(строковое значение) для установки содержимого innerHTML
- тег() и имя тега()
Существует также несколько методов для манипулирования данными HTML.
- добавить(Строка html), добавить(строка html)
- Текст приложения(Текст строки), Текст добавления(текст строки)
- Элемент добавления(Имя строки), Элемент добавления(Имя строки)
- html(Строковое значение)
Ниже приведен простой пример, в котором я использую методы jsoup DOM для анализа домашней страницы моего сайта и перечисления всех ссылок.
package com.journaldev.jsoup; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupExtractLinks { public static void main(String[] args) throws IOException { Document doc = Jsoup.connect("https://www.journaldev.com").get(); Element content = doc.getElementById("content"); Elements links = content.getElementsByTag("a"); for (Element link : links) { String linkHref = link.attr("href"); String linkText = link.text(); System.out.println("Text::"+linkText+", URL::"+linkHref); } } }
Вышеуказанная программа выдает следующий результат.
Text::jQuery Popup and Tooltip Window Animation Effects, URL::https://www.journaldev.com/6998/jquery-popup-and-tooltip-window-animation-effects Text::Jobin Bennett, URL::https://www.journaldev.com/author/jobin Text::March 7, 2015, URL::https://www.journaldev.com/6998/jquery-popup-and-tooltip-window-animation-effects Text::jQuery, URL::https://www.journaldev.com/dev/jquery Text::jQuery Plugins, URL::https://www.journaldev.com/dev/jquery/jquery-plugins Text::Permalink, URL::https://www.journaldev.com/6998/jquery-popup-and-tooltip-window-animation-effects Text::Apache HttpClient Example to send GET/POST HTTP Requests, URL::https://www.journaldev.com/7146/apache-httpclient-example-to-send-get-post-http-requests Text::Pankaj, URL::https://www.journaldev.com/author/pankaj Text::March 6, 2015, URL::https://www.journaldev.com/7146/apache-httpclient-example-to-send-get-post-http-requests Text::Java, URL::https://www.journaldev.com/dev/java Text::Permalink, URL::https://www.journaldev.com/7146/apache-httpclient-example-to-send-get-post-http-requests Text::Java HttpURLConnection Example to send HTTP GET/POST Requests, URL::https://www.journaldev.com/7148/java-httpurlconnection-example-to-send-http-getpost-requests Text::Pankaj, URL::https://www.journaldev.com/author/pankaj Text::March 6, 2015, URL::https://www.journaldev.com/7148/java-httpurlconnection-example-to-send-http-getpost-requests Text::Java, URL::https://www.journaldev.com/dev/java Text::Permalink, URL::https://www.journaldev.com/7148/java-httpurlconnection-example-to-send-http-getpost-requests Text::How to integrate Google reCAPTCHA in Java Web Application, URL::https://www.journaldev.com/7133/how-to-integrate-google-recaptcha-in-java-web-application Text::Pankaj, URL::https://www.journaldev.com/author/pankaj Text::March 4, 2015, URL::https://www.journaldev.com/7133/how-to-integrate-google-recaptcha-in-java-web-application Text::Java EE, URL::https://www.journaldev.com/dev/java/j2ee Text::Permalink, URL::https://www.journaldev.com/7133/how-to-integrate-google-recaptcha-in-java-web-application Text::JSF Spring Hibernate Integration Example Tutorial, URL::https://www.journaldev.com/7122/jsf-spring-hibernate-integration-example-tutorial Text::Pankaj, URL::https://www.journaldev.com/author/pankaj Text::March 3, 2015, URL::https://www.journaldev.com/7122/jsf-spring-hibernate-integration-example-tutorial Text::Hibernate, URL::https://www.journaldev.com/dev/hibernate Text::JSF, URL::https://www.journaldev.com/dev/jsf Text::Spring, URL::https://www.journaldev.com/dev/spring Text::Permalink, URL::https://www.journaldev.com/7122/jsf-spring-hibernate-integration-example-tutorial Text::JSF Spring Integration Example Tutorial, URL::https://www.journaldev.com/7112/spring-jsf-integration Text::Oracle Webcenter Portal Framework Application – Modifying Home Page And Login/Logout Target Pages & Deploying Your Application Into Custom Portal Managed Server Instance, URL::https://www.journaldev.com/6938/oracle-webcenter-portal-framework-application-modifying-home-page-and-loginlogout-target-pages-deploying-your-application-into-custom-portal-managed-server-instance Text::JSF and JDBC Integration Example Tutorial, URL::https://www.journaldev.com/7068/jsf-database-example-mysql-jdbc Text::Count the Number of Triangles in Given Picture – Programmatic Solution, URL::https://www.journaldev.com/7064/count-the-number-of-triangles-in-given-picture-programmatic-solution Text::JSF Expression Language (EL) Example Tutorial, URL::https://www.journaldev.com/7058/jsf-expression-language-jsf-el Text::Read all Articles →, URL::https://www.journaldev.com/page/2
Синтаксис селектора Jsoup
Мы также можем использовать синтаксис CSS или jQuery, подобный синтаксису, для поиска HTMl-элементов и управления ими. Документ
и Элемент
содержит select(строковый css-запрос)
, который мы можем использовать для этого.
Вот несколько кратких примеров;
- doc.select(“a”): возвращает все элементы тега “a” из HTML.
- doc.выберите(c|if): находит элементы
- doc.выберите(“#id1”): возвращает все теги с
- doc.select(“.cl1”): возвращает все теги с
- doc.выберите(“[href]”): возвращает все теги с атрибутом href
Мы также можем комбинировать селекторы, более подробную информацию вы можете найти в API селекторов .
Давайте теперь рассмотрим пример, в котором я получу URL-адрес автора Google+ со своего веб-сайта, используя как DOM, так и Selector API.
package com.journaldev.jsoup; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupFindAuthor { public static void main(String[] args) throws IOException { //journaldev.com posts have author set as below // findAuthorUsingDOM(); findAuthorUsingSelector(); } private static void findAuthorUsingSelector() throws IOException { Document doc = Jsoup.connect("https://www.journaldev.com").get(); Elements authors = doc.select("div.g-person"); //selector combination for(Element author : authors){ System.out.println("Selector:: Author Google+ URL::"+author.attr("data-href")); } } private static void findAuthorUsingDOM() throws IOException { Document doc = Jsoup.connect("https://www.journaldev.com").get(); Elements authors = doc.getElementsByClass("g-person"); for(Element author : authors){ System.out.println("DOM:: Author Google+ URL::"+author.attr("data-href")); } } }
Приведенная выше программа выводит следующий вывод.
DOM:: Author Google+ URL:://plus.google.com/u/0/118104420597648001532 Selector:: Author Google+ URL:://plus.google.com/u/0/118104420597648001532
пример jsoup для изменения HTML
Давайте теперь рассмотрим пример jsoup, где я буду анализировать входной HTML-код и манипулировать им.
package com.journaldev.jsoup; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupModifyHTML { public static final String SOURCE_HTML = "Jsoup Example " + "Welcome to JournalDev!!
" + "Hello" + "Pankaj" + "Home" + "Wikipedia" + ""; public static void main(String[] args) { Document doc = Jsoup.parse(SOURCE_HTML); System.out.println("Title="+doc.title()); //let's add attribute target="_blank" to all the links doc.select("a[href]").attr("rel", "nofollow"); //System.out.println(doc.html()); //change div class="class1" to class2 doc.select("div.class1").attr("class", "class2"); //System.out.println(doc.html()); //change the HTML value of first h1 element doc.select("h1").first().html("Welcome to JournalDev.com"); doc.select("h1").first().append("!!"); //System.out.println(doc.html()); //let's make Home link bold doc.select("a[href]").first().html("Home"); System.out.println(doc.html()); } }
Пожалуйста, внимательно ознакомьтесь с приведенной выше программой, чтобы понять, какие изменения вносятся во входную html-строку. Также сравните его с итоговым документом, как показано ниже в выходных данных.
пример jsoup для анализа страницы поиска Google и получения результатов
Прежде чем я завершу этот пост, приведу пример, в котором я анализирую первую страницу результатов поиска Google и извлекаю все ссылки.
package com.journaldev.jsoup; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class ParsingGoogleSearch { public static void main(String[] args) throws IOException { Document doc = Jsoup.connect("https://www.google.com/search?q=java").userAgent("Mozilla/5.0").get(); //System.out.println(doc.html()); Elements resultsH3 = doc.select("h3.r > a"); for (Element result : resultsH3) { String linkHref = result.attr("href"); String linkText = result.text(); System.out.println("Text::" + linkText + ", URL::" + linkHref.substring(6, linkHref.indexOf("&"))); } } }
Он выводит следующий вывод.
Text::Download Free Java Software, URL::=https://java.com/download Text::java.com: Java + You, URL::=https://www.java.com/ Text::Oracle Technology Network for Java Developers | Oracle ..., URL::=https://www.oracle.com/technetwork/java/ Text::Java (software platform) - Wikipedia, the free encyclopedia, URL::=https://en.wikipedia.org/wiki/Java_(software_platform) Text::Java (programming language) - Wikipedia, the free encyclopedia, URL::=https://en.wikipedia.org/wiki/Java_(programming_language) Text::Java Tutorial - TutorialsPoint, URL::=https://www.tutorialspoint.com/java/ Text::Welcome to JavaWorld.com, URL::=https://www.javaworld.com/ Text::Java.net: Welcome, URL::=https://www.java.net/ Text::News for java, URL::h?q=java Text::Javalobby | The heart of the Java developer community, URL::=https://java.dzone.com/
Обратите внимание, что в настоящее время результаты поиска Google являются частью тега h3 с классом “r”, и, очевидно, для ссылки используется “a”. Поэтому, если в будущем произойдет какое-либо изменение, например, будет изменено имя класса тега h3, то оно не будет работать должным образом, и нам придется внести небольшие изменения, посмотрев на исходную структуру html.
Это все для примера учебника jsoup, я надеюсь, что он поможет вам легко анализировать HTML – данные, когда это необходимо.
Ссылка: Официальный сайт