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,Document
org.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 Agent
tashrif buyurilayotgan saytga xabar qilinadigan identifikatordir. Ko'pgina saytlarda bu antispam filtri uchun eng muhim mezondir. Referrer
so'rov manbasining URL manzilini o'z ichiga oladi. Usul get()
ishlov beriladigan IOException-ni tashlaydi, shuning uchun biz hamma narsani blokga o'rashimiz try/catch
yoki 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 div
belgilangan sinfga ega blokni olamiz, biz undan namuna olish uchun foydalanamiz. Tanlangan blokimizdagi barcha elementlarni tanlash uchun org.jsoup.select.Elements sinfidan foydalanamiz .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Endi bizda shunday narsa bor: Endi 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: Qabul 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());
GO TO FULL VERSION