Это руководство является очень базовым, но Jsoup - отличная библиотека, с которой должны быть знакомы все, от стажеров до старших разработчиков.

Что такое Jsoup?

Jsoup - это библиотека Java для работы с реальным HTML. Он предоставляет очень удобный API для извлечения данных и управления ими с использованием лучших методов, подобных DOM, CSS и jquery.

Или, другими словами, это библиотека Java, которая позволяет очищать или извлекать указанную информацию с веб-сайтов с помощью методов CSS и jquery. Если вы знакомы с этими методами, эта часть этого руководства должна быть очень простой. В остальном очень легко подобрать.

Почему это важно для меня?

Jsoup - это мощная библиотека, у которой есть множество потенциальных приложений, от записи данных Craigslist до электронной таблицы до сканирования веб-сайта для адресов электронной почты. Jsoup можно использовать для упрощения многих процессов, на выполнение которых человеку потребуется гораздо больше времени.

Как мне начать использовать Jsoup?

Начните с загрузки основного JAR с Веб-сайта Jsoup.

Если вы используете Eclipse…

Щелкните проект правой кнопкой мыши (ctrl + ввод) и выберите «Путь сборки Java» на боковой панели, а затем «Библиотеки» на верхней панели. Наконец, выберите «Добавить внешние JAR…» и импортируйте файл JSoup JAR.

Если вы используете Netbeans…

Просто щелкните правой кнопкой мыши «библиотеки» в списке проектов, затем нажмите «Добавить» и выберите загруженный вами Jsoup JAR.

Если вы используете другую (или нет) IDE…

Изучите, как включить внешний JAR в вашу среду IDE и включить JSoup JAR, который вы скачали.

В этом примере мы будем анализировать данные с Zillow.com. Создайте новый класс Java под названием «ParseZillowGuide» и скопируйте следующее.

Выше мы сначала печатаем «выполняется…», чтобы знать, что программа запущена. Затем мы создаем новый объект Document под названием «документ» и затем устанавливаем его как URL-адрес домов в Денвере на Zillow. Затем мы создаем строку «title» и устанавливаем ее как заголовок «document» или захваченной страницы Zillow. Затем мы печатаем этот заголовок, перехватываем исключение и печатаем готово.

Примечание. Мне нравится, когда в моей консоли есть операторы «работает…» и «выполнено», поэтому я знаю, что моя программа работает, поскольку программы, взаимодействующие с Интернетом, занимают больше времени, чем программы, которые просто остаются в автономном режиме. Кроме того, мне нравится включать метод печати, поэтому мне просто нужно написать print (*); вместо System.out.print (*) ;.

Приведенный выше код должен вернуть Заголовок: Недвижимость в Денвере - Дома на продажу в Денвере | Zillow. " Это интересно, но не совсем полезно. Как мы видим на «веб-сайте Zillow, который мы используем, есть список домов, который включает различную информацию, включая цену, адрес, количество ванн и т. Д. Чтобы извлечь эту информацию, мы можем использовать ряд методы, описанные на сайте Jsoup, здесь. Они очень похожи на синтаксис CSS, поэтому, если вы использовали их раньше, это должно казаться естественным. Мы будем использовать следующие:

  • .class: поиск элементов по имени класса, например .masthead
  • : содержит (текст): найти элементы, содержащие данный текст. При поиске регистр не учитывается; например p: содержит (jsoup)
  • el [attr]: элементы с атрибутом, например а [href]

Есть много других вариантов, включая отношения родитель / потомок, селекторы идентификаторов, родственные отношения и многое другое.

Чтобы найти информацию о данных свойствах, нам нужно изучить веб-сайт Zillow. Это нужно делать с помощью Chrome. Если у вас нет Chrome, сделайте себе одолжение и скачайте его.

Перейдите к http://www.zillow.com/homes/for_sale/Denver-CO, щелкните правой кнопкой мыши одну из цен справа и выберите Проверить. Это должно вызвать диалоговое окно, подобное показанному ниже.

Нажмите CTRL + F для поиска в исходном коде Zillow и введите цену одного из перечисленных свойств. Как мы видим, цена указана в диапазоне, который является частью класса «.zsg-photo-card-price». Мы можем использовать этот класс в нашем Java-коде для очистки цен. Для этого нам нужно создать новый объект Elements (тип arrayylist) и вызвать метод select в нашем документе с аргументами выбранного нами селектора jquery / CSS. В этом случае мы можем использовать «.zsg-photo-card-price». Мы также хотим убедиться, что эти цены содержат знак доллара, на случай, если этот класс также используется для чего-то еще. Для этого мы можем добавить «: contains ($)

Elements price = document.select(".zsg-photo-card-price:contains($)"); //Get price

Чтобы распечатать этот Arraylist, мы можем использовать простой цикл for. Метод .text () превращает элемент в строку, чтобы мы могли распечатать ее с помощью syso.

for (int i=0; i < price.size(); i++) {
print(price.get(i).text());
}

Теперь, когда вы запустите программу, вы должны увидеть заголовок и список сумм в долларах. Цены отличные, но мы также хотим знать адреса домов. Для этого нам нужно создать еще один объект Elements. Назовем это адресом. Посмотрев исходный код, мы можем использовать следующий код для очистки этих данных. При этом выполняется поиск диапазона с атрибутом itemprop и текстом DenverCO.

Elements address = document.select("span[itemprop]:contains(DenverCO)"); //Get address

Вместо использования двух циклов for мы можем объединить выходные данные в один.

for (int i=0; i < price.size(); i++) {
print(address.get(i).text() + " " + price.get(i).text());
}

Теперь мы можем вывести адрес и цену в одной строке консоли. На этом этапе ваш код должен выглядеть, как показано ниже.

Отсюда вы можете легко экспортировать это как CSV с помощью FileOutputStream. С помощью этого CSV вы можете сортировать свойства по своему усмотрению. Ниже приведен последний пример вывода CSV.

Заключение

Jsoup - это универсальная программа, которая не только дает программистам возможность использовать веб-контент в своем программировании, но также предоставляет надежные инструменты для сбора данных, которые могут быть дополнительно изучены в формате электронной таблицы.

Надеюсь, вам понравилось, все ваши отзывы приветствуются и ценятся!