Ola bilsin ki, nə vaxtsa tətbiqinizdə veb-saytdan və ya HTML sənədindən məlumat almalı olacaqsınız və mən əlavə etmədən deyəcəm ki, jsoup kitabxanasından istifadə etmək işinizi xeyli asanlaşdıracaq. Vikiyə görə , jsoup HTML sənədlərində saxlanılan məlumatların təhlili, çıxarılması və manipulyasiyası üçün nəzərdə tutulmuş açıq mənbəli Java kitabxanasıdır.
Sürətli başlanğıc
Kitabxana jar faylı kimi yüklənə və layihəyə yerləşdirilə və ya Maven/Gradle vasitəsilə qoşula bilər. Məqalənin sonunda rəsmi sayta keçid buraxacağam: orada kitabxananın cari versiyasını tapa bilərsiniz. Nümunədə Maven vasitəsilə əlaqədən istifadə edəcəyik. Bir asılılıq əlavə edək:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
İstifadəsi
Document
İlk növbədə, org.jsoup.nodes.Document-dən təhlil üçün mənbəni göstərən sinif nümunəsini əldə etməlisiniz . Bu yerli fayl və ya keçid ola bilər. Məsələn, bu məqalədə yandex.ru saytından istifadə edəcəyik və onların cari xəbər lentini almağa çalışacağıq:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
ziyarət edilən sayta bildirilən identifikatordur. Bir çox saytlarda bu, antispam filtri üçün ən vacib meyardır. Referrer
sorğu mənbəyinin URL-ini ehtiva edir. Metod get()
idarə olunan IOException atır, ona görə də biz hər şeyi try/catch
bir bloka yığa bilərik və ya sadəcə olaraq throws
. İndi bu səhifənin mənbə kodunu almışıq. Lazım gələrsə, jsoup kitabxanasının özü zədələnmiş elementləri bərpa edə bilər. İndi etməmiz lazım olan tək şey axtarışı ayrı bir bloka daraltmaqdır. Metod select()
geniş istifadə seçiminə malikdir: o, elementləri etiket, atributlar, sinif və digər parametrlər üzrə axtarmağa imkan verir. Demək olar ki, bütün müasir brauzerlər seçilmiş elementin mənbə kodunu tez axtarmaq imkanını dəstəkləyir. Sadə manipulyasiyalarla biz ehtiyac duyduğumuz elementin mənbə kodunu tapırıq və div
seçmə üçün istifadə edəcəyimiz müəyyən edilmiş siniflə bir blok alırıq. Seçdiyimiz blokdan bütün elementləri seçmək üçün org.jsoup.select.Elements sinifindən istifadə edək .Elements
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
İndi bizdə belə bir şey var: İndi bütün elementləri təkrarlamaq üçün kiçik bir döngədən istifadə etməliyik:
for (Element element : listNews.select("a"))
System.out.println(element.text());
Metod text()
işarələmə kodunu ləğv etməyə imkan verir və bütün daxil olan elementlər üçün yalnız mətn birləşməsini buraxır. İcranın nəticəsi aşağıdakı kimi olacaq: Alınan sətirlərin faktiki sayının səhifədəki faktiki ekrana uyğun gəlmədiyini görmək asandır. Tələlərin yatdığı yer budur. İşarələmənin mənbə koduna baxsanız, ən son xəbərlərin müəyyən vaxt intervalında animasiyalı şəkildə dəyişdiyini görərsiniz. Bu "daşların" bəziləri əlavə nümunələr və əlbəttə ki, sınaqlarla həll olunur. Belə çıxa bilər ki, ilk beş element bizə lazım olan məlumatları, altıncı element isə yalnız skriptlə yazılmış boş sətirdən ibarət olacaq. get(int index)
Elə olur ki, blokların heç bir identifikatoru olmayacaq, o zaman metoddan istifadə edərək sözügedən elementin mövqe nömrəsini birbaşa göstərmək olar .
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION