JavaRush /Blog Java /Random-PL /3 przykłady analizowania pliku HTML w Javie przy użyciu J...
Sdu
Poziom 17

3 przykłady analizowania pliku HTML w Javie przy użyciu Jsoup

Opublikowano w grupie Random-PL
3 przykłady parsowania pliku HTML w Javie przy użyciu Jsoup - 1HTML jest rdzeniem sieci WWW, wszystkie strony internetowe, które widzisz, niezależnie od tego, czy są generowane dynamicznie przy użyciu JavaScript, JSP, PHP, ASP czy innych technologii internetowych, są oparte na HTML. W rzeczywistości Twoja przeglądarka analizuje kod HTML i wyświetla go w dogodny dla Ciebie sposób. Co jednak, jeśli trzeba przeanalizować dokument HTML i znaleźć w nim jakiś element, znacznik, atrybut lub sprawdzić, czy określony element istnieje, czy nie, za pomocą programu Java. Gdybyś był programistą Java przez kilka lat, jestem pewien, że przeprowadziłbyś analizę XML przy użyciu parserów takich jak DOM lub SAX. Ale, jak na ironię, zdarza się, że trzeba przeanalizować dokument HTML z podstawowej aplikacji Java, która nie zawiera serwletów ani innych technologii sieciowych Java. Co więcej, Core JDK nie zawiera również bibliotek HTTP ani HTML. Dlatego podczas analizowania pliku HTML wielu programistów Java pyta Google, jak uzyskać wartość tagu HTML w Javie. Kiedy natknąłem się na to, byłem pewien, że rozwiązaniem będzie biblioteka open source, która zaimplementuje potrzebną mi funkcjonalność, ale nie wiedziałem, że będzie tak wspaniała i bogata w funkcje jak Jsoup. Nie tylko zapewnia wsparcie dla odczytu i analizowania plików HTML, atrybutów, klas CSS w stylu JQuery, ale jednocześnie pozwala na ich modyfikację. Używając Jsoup, możesz zrobić wszystko, co chcesz z dokumentem HTML. W tym artykule przeanalizujemy plik HTML i znajdziemy nazwy i atrybuty tagów. Przyjrzymy się także przykładom pobierania i analizowania kodu HTML z pliku i dowolnego adresu URL, np. strony głównej Google.

Co to jest Jsoup

Jsoup to biblioteka Java typu open source do pracy z prawdziwym kodem HTML. Zapewnia bardzo wygodne API do pobierania i manipulowania danymi przy użyciu najlepszych technik DOM, CSS i jQuery. Jsoup implementuje specyfikację WHATWG HTML5 i analizuje HTML w tym samym DOM, co robią nowoczesne przeglądarki, takie jak Chrome i Firefox. Oto niektóre przydatne funkcje biblioteki Jsoup:
  • Jsoup może zeskrobać i przeanalizować kod HTML z adresu URL, pliku lub ciągu znaków.
  • Jsoup może znajdować i wyodrębniać dane za pomocą przechodzenia DOM lub selektorów CSS.
  • Jsoup umożliwia manipulowanie elementami HTML, atrybutami i tekstem.
  • Jsoup zapewnia oczyszczanie białej listy informacji dostarczonych przez użytkowników, aby zapobiec atakom XSS.
  • Jsoup tworzy również „schludny” kod HTML.
Jsoup został zaprojektowany do pracy z różnymi rodzajami HTML, które istnieją w prawdziwym świecie, w tym z prawidłowo zweryfikowanym HTML z niekompletnym, niezweryfikowanym zestawem tagów. Jedną z głównych zalet Jsoup jest jego niezawodność.

Parsowanie HTML w Javie przy użyciu Jsoup

W tym samouczku zobaczymy trzy różne przykłady analizowania i przeglądania dokumentu HTML w Javie przy użyciu Jsoup. W pierwszym przykładzie przeanalizujemy ciąg HTML zawierający znaczniki w postaci literału ciągu Java. W drugim przykładzie pobierzemy nasz dokument HTML z Internetu, a w trzecim przykładzie pobierzemy własny przykładowy plik HTML login.html do analizy. Ten plik jest przykładowym dokumentem HTML składającym się ze znacznika „title” i znacznika „div” w sekcji „body” zawierającej formularz HTML. Formularz zawiera pola do wpisania nazwy użytkownika i hasła, a także przyciski resetowania i potwierdzania dalszych działań. Jest to „poprawny” kod HTML, który może przejść kontrolę „ważności”, co oznacza, że ​​wszystkie tagi i atrybuty są prawidłowo zamknięte. Tak wygląda nasz plik HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Dzięki Jsoup bardzo łatwo jest analizować HTML, wystarczy wywołać metodę statyczną Jsoup.parse()i przekazać do niej ciąg HTML. Jsoup udostępnia kilka przeciążonych metod parse()odczytywania kodu HTML z ciągu znaków, pliku, podstawowego identyfikatora URI, adresu URL i pliku InputStream. Możesz także określić kodowanie, aby poprawnie odczytać plik HTML, jeśli nie jest on w formacie UTF-8. Metoda parse(String html)analizuje przychodzący kod HTML w nowy obiekt Document. W Jsoup klasa Documentdziedziczy po klasie Element, co stanowi jej rozszerzenie Node. Klasa Nodedziedziczy także po klasie TextNode. Tak długo, jak przekażesz do metody ciąg znaków inny niż null, masz gwarancję udanej, znaczącej analizy obiektu Documentzawierającego (przynajmniej) elementy „head” i „body”. Jeśli masz obiekt Document, możesz uzyskać żądane dane, wywołując odpowiednie metody klasy Documenti jej rodziców Elementoraz Node.

Program Java do analizowania dokumentu HTML

Oto nasz kompletny program do analizowania ciągu HTML, pliku HTML pobranego z Internetu i lokalnego pliku HTML. Aby go uruchomić, możesz użyć IDE (Eclipse lub dowolnego innego) lub wiersza poleceń. W Eclipse jest to bardzo proste, po prostu skopiuj ten kod, utwórz nowy projekt Java, kliknij prawym przyciskiem myszy folder „src” i wklej skopiowany kod. Eclipse zajmie się utworzeniem odpowiedniego pakietu i pliku kodu źródłowego o odpowiedniej nazwie, więc jest to o wiele mniej pracy. Jeśli masz już projekt Java, to jest to tylko jeden krok. Poniższy program ilustruje trzy przykłady analizowania i przeglądania pliku HTML. W pierwszym przykładzie bezpośrednio analizujemy ciąg znaków zawierający HTML, w drugim plik HTML pobrany z adresu URL, w trzecim pobieramy i analizujemy dokument HTML z lokalnego systemu plików.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Wyjście:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Parser HTML Jsoup dołoży wszelkich starań, aby stworzyć „czystą” analizę dostarczonego kodu HTML, niezależnie od tego, czy jest on poprawnie sformułowany, czy nie. Może obsłużyć następujące błędy:
  • niezamknięte tagi. Na przykład,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • domniemane tagi. Na przykład otwarte <td>Java is Great</td>zostaną owinięte<table><tr><td>
  • Jsoup tworzy solidne struktury dokumentów (HTML zawiera głowę i treść, ale treść zawiera tylko istotne elementy)
Jsoup to doskonała i niezawodna biblioteka typu open source, która sprawia, że ​​czytanie dokumentów HTML, fragmentów treści, ciągów HTML i bezpośrednie analizowanie treści internetowych HTML jest bardzo proste.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION