JavaRush /Blog Java /Random-PL /Łatwe analizowanie HTML za pomocą jsoup
Stanislav
Poziom 21
Москва

Łatwe analizowanie HTML za pomocą jsoup

Opublikowano w grupie Random-PL
Być może pewnego dnia będziesz musiał pobrać informacje ze strony internetowej lub dokumentu HTML w swojej aplikacji i bez zbędnych ceregieli powiem, że korzystanie z biblioteki jsoup znacznie uprości Twoje zadanie. Według wiki jsoup to biblioteka Java typu open source przeznaczona do analizowania, wyodrębniania i manipulowania danymi przechowywanymi w dokumentach HTML.

Szybki start

Bibliotekę można pobrać jako plik jar i umieścić w projekcie lub połączyć za pomocą Maven/Gradle. Na końcu artykułu zostawię link do oficjalnej strony internetowej: tam znajdziesz aktualną wersję biblioteki. W przykładzie wykorzystamy połączenie poprzez Maven. Dodajmy zależność:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Stosowanie

Przede wszystkim musisz pobrać instancję klasy Documentz org.jsoup.nodes.Document wskazując źródło do analizy. Może to być plik lokalny lub łącze. Na przykład w tym artykule skorzystamy ze strony internetowej yandex.ru i spróbujemy uzyskać ich aktualny kanał informacyjny:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentto identyfikator przekazywany odwiedzanej witrynie. W wielu witrynach jest to najważniejsze kryterium filtra antyspamowego. Referrerzawiera adres URL źródła żądania. Metoda get()zgłasza obsługiwany wyjątek IOException, dzięki czemu możemy zawinąć wszystko w try/catchblok lub po prostu rzucić dalej za pomocą throws. Otrzymaliśmy już kod źródłowy tej strony. W razie potrzeby sama biblioteka jsoup może przywrócić uszkodzone elementy. Teraz wystarczy zawęzić wyszukiwanie do osobnego bloku. Metoda select()ma duży wybór zastosowań: pozwala wyszukiwać elementy po tagu, atrybutach, klasie i innych parametrach. Prawie wszystkie współczesne przeglądarki obsługują możliwość szybkiego wyszukiwania kodu źródłowego wybranego elementu. Za pomocą prostych manipulacji znajdujemy kod źródłowy potrzebnego nam elementu i otrzymujemy divblok z określoną klasą, którego użyjemy do próbkowania. Łatwe analizowanie HTML za pomocą jsoup - 1Użyjmy klasy Elementsz org.jsoup.select.Elements, aby wybrać wszystkie elementy z wybranego przez nas bloku.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Teraz mamy coś takiego: Łatwe analizowanie HTML za pomocą jsoup - 2Teraz jedyne, co musimy zrobić, to użyć małej pętli, aby iterować po wszystkich elementach:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
Metoda text()pozwala odrzucić kod znaczników i pozostawia jedynie kombinację tekstu dla wszystkich przychodzących elementów. Wynik wykonania będzie następujący: Łatwe analizowanie HTML za pomocą jsoup - 3Łatwo zauważyć, że rzeczywista liczba otrzymanych wierszy nie odpowiada faktycznemu wyświetleniu na stronie. Tu właśnie kryją się pułapki. Jeśli spojrzysz na kod źródłowy znaczników, zauważysz, że najnowsze wiadomości zmieniają się w sposób animowany w określonych odstępach czasu. Niektóre z tych „kamieni” rozwiązuje się poprzez dodatkowe pobieranie próbek i oczywiście testy. Może się okazać, że pierwszych pięć elementów będzie zawierało potrzebne nam informacje, a szósty element będzie zawierał jedynie zapisaną w skrypcie pustą linię. Zdarza się również, że bloki nie będą miały żadnych identyfikatorów, wtedy można bezpośrednio wskazać metodą get(int index)numer pozycji danego elementu.
System.out.println(listNews.select("a").get(2).text());

Wniosek

Ten przykład pokazuje tylko niewielką część możliwości jsoup. Istnieje również fakt, że witryny są często aktualizowane, zmieniając strukturę kodu znaczników, więc pracując ze skrobaniem, musisz być gotowy na dostosowanie się do zmian. Więcej informacji i aktualną wersję można znaleźć na oficjalnej stronie jsoup.org , a więcej o klasach i metodach można przeczytać pod linkiem o7planning.org . Zostawię link do mojego githuba , w chwili pisania tego tekstu istnieje kilka botów Telegramu, które używają Jsoup do odbierania i wyświetlania informacji.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION