JavaRush /Java блог /Random UA /Парсинг html бібліотекою jsoup
Сергей
40 рівень
Москва

Парсинг html бібліотекою jsoup

Стаття з групи Random UA
Отже, ми хочемо отримати конкретну інформацію з сайту. Покроково розберемо, як це зробити. Парсинг html бібліотекою súp - 1Для початку нам потрібно отримати об'єкт Document. Це уявлення нашої html сторінки. У Soup є кілька способів перетворити сайт на об'єкт Document. Підключитись до сервера
Document document = Jsoup.connect("https://hh.ru/").get();
Soup сам підключається до сайту. Цей спосіб найпростіший, але він годиться тільки для тестування. Є більш зручні та гнучкі http клієнти. Також майте на увазі, яким би http клієнтом ви не користувалися, додавайте в запит заголовок User-Agentіз значенням наприклад Chrome/81.0.4044.138. За цим заголовком сервер визначає з якого пристрою ви підключабося. Без цього заголовка сервер вважає вас роботом і може забанити. З файлу ;
File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
Це основний спосіб отримання об'єкта Document. Останній аргумент "hh.ru"– базовий URI. Це потрібно для створення абсолютних посилань із відносних, які є на сайті. З рядка
String html =
                "<html>                                                                       " +
                "    <head>                                                                   " +
                "        <title href=\"hh.ru/vacancy?home\">                                  " +
                "            Работа в Москве, поиск персонала и публикация вакансий - hh.ru   " +
                "        </title>                                                             " +
                "    </head>                                                                  " +
                "    <body>                                                                   " +
                "        <div class=\"header main\">                                          " +
                "            <h1>Работа найдется для каждого</h1>                             " +
                "            <div>Поиск вакансий</div>                                        " +
                "        </div>                                                               " +
                "        <div class=\"content\">                                              " +
                "            <div>Вакансии дня</div>                                          " +
                "            <div id=\"123\">Компании дня</div>                               " +
                "            <div>Работа из дома</div>                                        " +
                "        </div>                                                               " +
                "    </body>                                                                  " +
                "</html>                                                                      ";

        Document document = Jsoup.parse(html, "hh.ru");
Далі я демонструватиму бібліотеку на цьому html, який представляє спрощений сайт. Основне завдання при парсингу - отримати потрібний тег . Робити ми це будемо за допомогою методу select. Зауважте, що він завжди повертає список тегів. Якщо теги не знайдені, список буде порожнім. В аргумент методу потрібно передати css селектор, яким шукаються теги. На селекторах я зупинюся докладніше, бо вся робота зводиться до написання правильного селектора. Зазвичай, нам потрібно скласти його так, щоб він повертав один тег.
Elements h1 = document.select("h1");
System.out.println(h1);
Отримати теги теги h1 Висновок:

<h1>Работа найдется для каждого</h1>
Elements titleElem = document.select("head > title");
Отримати теги title. Знак >вибирає теги, titleвкладені в тегhead
Elements divs = document.select("body > div");
Отримати теги divвкладені вbody
Elements firstDiv = document.select("body > div:nth-child(1)");
Отримати перший тег divвкладений у body. Отримувати тег за порядковим номером поганий спосіб, тому що його становище на сайті може змінитися. Найкраще визначити тег за абсолютними параметрами. Такими параметрами є атрибути classтаid
Elements contentElem = document.select("body > div.content");
Отримати тег divc класом "content", вкладений уbody
Elements idElem = document.select("#123");
Отримати теги c id "123"
Elements divHeader = document.select("body > div.header.main :not(h1)");
Отримати теги divc класом "header" та "main", вкладені у body, але без тегів h1 Висновок:

<div>
 Поиск вакансий
</div>
Методи Elements Коли ми отримали список, Elementsможна отримати дані з нього. Нагадаю, зазвичай селектором шукається один тег, тобто. у Elementsмає бути розмір 1.
elements.size();
кількість знайдених тегів
elements.get(0);
отримати перший тег зі списку знайдених
elements.text();
текст вкладений у тег
elements.attr("href");
значення атрибуту "href"
elements.outerHtml();
рядкове представлення тега Якщо вам потрібно швидко отримати селектор елемента - у браузері відкрийте панель розробника (f12), натисніть правою кнопкою елемент, "переглянути код", натисніть правою кнопкою тег, далі "Copy" "Copy selector". Такий селектор буде оптимальним, але для швидкого результату цілком підходить. Висновок Це основи роботи з бібліотекою Soup. Але цього цілком достатньо, щоб парсити сайти. Для впевненої роботи вам потрібна лише практика написання селекторів у реальних сайтах. Ps Ця бібліотека використовується для вирішення великого завдання на 38 рівні.Парсинг html бібліотекою súp - 1Парсинг html бібліотекою súp - 3
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ