JavaRush /Java Blogu /Random-AZ /jsoup ilə asan HTML təhlili
Stanislav
Səviyyə
Москва

jsoup ilə asan HTML təhlili

Qrupda dərc edilmişdir
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 Agentziyarət edilən sayta bildirilən identifikatordur. Bir çox saytlarda bu, antispam filtri üçün ən vacib meyardır. Referrersorğu mənbəyinin URL-ini ehtiva edir. Metod get()idarə olunan IOException atır, ona görə də biz hər şeyi try/catchbir 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ə divseç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 jsoup istifadə edərək asan HTML təhlili - 1sinifində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: jsoup istifadə edərək asan HTML təhlili - 2İ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: jsoup istifadə edərək asan HTML təhlili - 3Alı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());

Nəticə

Bu nümunə jsoup-un nəyə qadir olduğunun yalnız kiçik bir hissəsini göstərir. Saytların tez-tez yenilənməsi, işarələmə kodunun strukturunu dəyişdirməsi də var, buna görə də kazıma ilə işləyərkən dəyişikliklərə uyğunlaşmağa hazır olmalısınız. Daha ətraflı məlumatı və cari versiyanı jsoup.org rəsmi internet saytından əldə edə bilərsiniz , dərslər və metodlar haqqında ətraflı məlumatı o7planning.org linkindən oxuya bilərsiniz . Mən github- a bir keçid buraxacağam , yazarkən məlumat almaq və göstərmək üçün Jsoup-dan istifadə edən bir neçə Telegram botu var.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION