JavaRush /جاوا بلاگ /Random-UR /Лёгкий парсинг HTML с помощью jsoup
Stanislav
سطح
Москва

Лёгкий парсинг HTML с помощью jsoup

گروپ میں شائع ہوا۔
Возможно, когда-нибудь вам будет необходимо получить информацию с Howого-либо сайта либо HTML-documentа в своем приложении, и я без лишних слов скажу, что использование библиотеки jsoup существенно упростит вашу задачу. Как говорится на wiki, jsoup — это Java-библиотека с открытым исходным codeом, предназначенная для анализа, извлечения и управления данными, хранящимися в documentах HTML.

Быстрый старт

Библиотеку можно скачать в виде jar file и поместить в проект, а также подключить с помощью Maven/Gradle. Ссылку на официальный сайт я оставлю в конце статьи: там вы сможете найти актуальную версию библиотеки. В примере будем использовать подключение через Maven. Добавим зависимость:

<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Использование

Первым делом вам необходимо получить экземпляр класса Document из org.jsoup.nodes.Document с указанием на источник для разбора. Им может выступать How локальный файл, так и link. Для примера, в данной статье мы будем использовать сайт yandex.ru и попытаемся получить их актуальную новостную ленту:

		Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agent является идентификатором, который сообщается посещаемому сайту. На многих сайтах он является важнейшим критерием для антиспам фильтра. Referrer содержит URL источника requestа. Метод get() вызывает обрабатываемое исключение IOException, так что мы можем обернуть все в try/catch блок, либо просто перебросить его дальше с помощью throws. На данный момент мы получor исходный code данной pages. При необходимости библиотека jsoup сама может восстановить поврежденные элементы. Теперь нам остается лишь сузить поиск до отдельного блока. Метод select() имеет большую выборку в использовании: он позволяет искать элементы по тегу, атрибутам, классу и другим параметрам. Почти все современные браузеры поддерживают возможность быстрого поиска исходного codeа выбранного element. Нехитрыми манипуляциями, мы находим исходный code нужного нам element и получаем div блок с указанным классом, его мы и будем использовать для выборки. Лёгкий парсинг HTML с помощью jsoup - 1Воспользуемся классом Elements из org.jsoup.select.Elements, для выборки всех элементов из нашего выбранного блока.

Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Now мы имеем что то вроде этого: Лёгкий парсинг HTML с помощью jsoup - 2Теперь нам остается лишь использовать небольшой цикл для пробора всех элементов:

for (Element element : listNews.select("a"))
            System.out.println(element.text());
Метод text() позволяет отбросить code разметки и оставляет лишь сочетание текста для всех входящих элементов. Результат выполнения будет таков: Лёгкий парсинг HTML с помощью jsoup - 3Нетрудно заметить, что реальное количество полученных строк не соответствует фактическому отображению на странице. В этом и заключаются подводные камни. Если посмотреть исходный code разметки, можно заметить, что последняя новость анимационно меняется с определенным интервалом времени. Часть таких "камней" решается дополнительной выборкой, ну и конечно тестами. Может оказаться так, что первые пять элементов будут содержать нужную нам информацию, а на шестом элементе будет лишь заскриптованная пустая строка. Бывает и такое, что блоки не будут обладать Howими-либо идентификаторами, тогда есть возможностью прямо указать с помощью метода get(int index) на номер позиции рассматриваемого element.

System.out.println(listNews.select("a").get(2).text());

Заключение

В данном примере показана лишь малая часть того, на что способен jsoup. Не стоит отменять и тот факт, что сайты нередко обновляются, изменяя структуру codeа разметки, так что при работе с парсингом нужно быть готовым адаптироваться к изменениям. Больше информации и актуальную версию вы можете получить на официальном сайте jsoup.org, более подробно почитать про классы и методы можно по ссылке o7planning.org. Оставлю ссылку на мой github, на момент написания статьи там находится несколько Telegram-ботов, которые используют Jsoup для получения и выдачи информации.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION