JavaRush /Java blogi /Random-UZ /Jsoup yordamida HTMLni oson tahlil qilish
Stanislav
Daraja
Москва

Jsoup yordamida HTMLni oson tahlil qilish

Guruhda nashr etilgan
Ehtimol, bir kun kelib siz ilovangizdagi veb-sayt yoki HTML hujjatidan ma'lumot olishingiz kerak bo'ladi va men aytamanki, jsoup kutubxonasidan foydalanish vazifangizni sezilarli darajada osonlashtiradi. Wiki -ga ko'ra , jsoup - bu HTML hujjatlarida saqlangan ma'lumotlarni tahlil qilish, chiqarish va boshqarish uchun mo'ljallangan ochiq manbali Java kutubxonasi.

Tez boshlash

Kutubxonani jar fayli sifatida yuklab olish va loyihaga joylashtirish yoki Maven/Gradle yordamida ulanish mumkin. Maqolaning oxirida rasmiy veb-saytga havolani qoldiraman: u erda kutubxonaning joriy versiyasini topishingiz mumkin. Misolda biz Maven orqali ulanishdan foydalanamiz. Keling, qaramlikni qo'shamiz:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Foydalanish

Avvalo, Documentorg.jsoup.nodes.Document dan tahlil qilish uchun manbani ko'rsatuvchi sinf namunasini olishingiz kerak. Bu mahalliy fayl yoki havola bo'lishi mumkin. Masalan, ushbu maqolada biz yandex.ru veb-saytidan foydalanamiz va ularning joriy yangiliklar lentasini olishga harakat qilamiz:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agenttashrif buyurilayotgan saytga xabar qilinadigan identifikatordir. Ko'pgina saytlarda bu antispam filtri uchun eng muhim mezondir. Referrerso'rov manbasining URL manzilini o'z ichiga oladi. Usul get()ishlov beriladigan IOException-ni tashlaydi, shuning uchun biz hamma narsani blokga o'rashimiz try/catchyoki shunchaki uni throws. Endi biz ushbu sahifaning manba kodini oldik. Agar kerak bo'lsa, jsoup kutubxonasining o'zi shikastlangan elementlarni tiklashi mumkin. Endi biz qilishimiz kerak bo'lgan yagona narsa qidiruvni alohida blokga qisqartirishdir. Usul select()foydalanishning katta tanloviga ega: u teg, atributlar, sinf va boshqa parametrlar bo'yicha elementlarni qidirish imkonini beradi. Deyarli barcha zamonaviy brauzerlar tanlangan elementning manba kodini tezda qidirish qobiliyatini qo'llab-quvvatlaydi. Oddiy manipulyatsiyalar yordamida biz kerakli elementning manba kodini topamiz va divbelgilangan sinfga ega blokni olamiz, biz undan namuna olish uchun foydalanamiz. Tanlangan blokimizdagi barcha elementlarni tanlash uchun org.jsoup.select.Elements Jsoup yordamida HTMLni oson tahlil qilish - 1sinfidan foydalanamiz .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Endi bizda shunday narsa bor: jsoup yordamida oson HTML tahlil qilish - 2Endi biz barcha elementlarni takrorlash uchun kichik tsikldan foydalanishimiz kerak:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Usul text()belgilash kodini o'chirishga imkon beradi va barcha kiruvchi elementlar uchun faqat matn birikmasini qoldiradi. Amalga oshirish natijasi quyidagicha bo'ladi: jsoup yordamida HTMLni oson tahlil qilish - 3Qabul qilingan satrlarning haqiqiy soni sahifadagi haqiqiy ko'rsatkichga mos kelmasligini sezish oson. Bu erda tuzoqlar yotadi. Belgilanishning manba kodiga qarasangiz, so'nggi yangiliklar ma'lum vaqt oralig'ida jonlantirilgan o'zgarishlarni sezasiz. Ushbu "toshlarning" ba'zilari qo'shimcha namunalar olish va, albatta, testlar bilan hal qilinadi. Ma'lum bo'lishicha, birinchi beshta element bizga kerakli ma'lumotlarni o'z ichiga oladi va oltinchi element faqat skriptli bo'sh qatorni o'z ichiga oladi. get(int index)Bundan tashqari, bloklarda hech qanday identifikator bo'lmaydi, keyin to'g'ridan-to'g'ri usul yordamida ko'rib chiqilayotgan elementning pozitsiya raqamini ko'rsatish mumkin .
System.out.println(listNews.select("a").get(2).text());

Xulosa

Ushbu misol jsoup nimaga qodirligini faqat kichik bir qismini ko'rsatadi. Bundan tashqari, saytlar tez-tez yangilanib turishi, belgilash kodining tuzilishini o'zgartirishi haqiqatdir, shuning uchun qirqish bilan ishlashda siz o'zgarishlarga moslashishga tayyor bo'lishingiz kerak. Qo'shimcha ma'lumot va joriy versiyani jsoup.org rasmiy veb-saytidan olishingiz mumkin ; darslar va usullar haqida o'qish uchun o7planning.org havolasi orqali tanishishingiz mumkin . Men github- ga havolani qoldiraman , yozish paytida Jsoup-dan ma'lumot olish va ko'rsatish uchun foydalanadigan bir nechta Telegram botlari mavjud.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION