JavaRush /Blog Java /Random-FR /3 exemples de comment analyser un fichier HTML en Java à ...
Sdu
Niveau 17

3 exemples de comment analyser un fichier HTML en Java à l'aide de Jsoup

Publié dans le groupe Random-FR
3 exemples de comment analyser un fichier HTML en Java à l'aide de Jsoup - 1HTML est le cœur du WEB, toutes les pages Internet que vous voyez, qu'elles soient générées dynamiquement à l'aide de JavaScript, JSP, PHP, ASP ou d'autres technologies web, sont basées sur HTML. En fait, votre navigateur analyse le code HTML et l'affiche d'une manière qui vous convient. Mais que se passe-t-il si vous avez besoin d'analyser un document HTML et d'y trouver un élément, une balise, un attribut ou de vérifier si un élément spécifique existe ou non à l'aide d'un programme Java. Si vous aviez été programmeur Java depuis plusieurs années, je suis sûr que vous auriez effectué une analyse XML à l'aide d'analyseurs tels que DOM ou SAX. Mais, ironiquement, il arrive parfois que vous ayez besoin d'analyser un document HTML à partir d'une application Java de base qui ne contient pas de servlets ni d'autres technologies Web Java. De plus, Core JDK ne contient pas non plus de bibliothèques HTTP ou HTML. C'est pourquoi, lorsqu'il s'agit d'analyser un fichier HTML, de nombreux programmeurs Java demandent à Google comment obtenir la valeur d'une balise HTML en Java. Lorsque je suis tombé sur cela, j'étais sûr que la solution serait une bibliothèque open source qui implémenterait les fonctionnalités dont j'avais besoin, mais je ne savais pas qu'elle serait aussi merveilleuse et riche en fonctionnalités que Jsoup. Il prend non seulement en charge la lecture et l'analyse des fichiers HTML, des attributs et des classes CSS dans le style JQuery, mais vous permet en même temps de les modifier. En utilisant Jsoup, vous pouvez faire tout ce que vous voulez avec un document HTML. Dans cet article, nous allons analyser un fichier HTML et trouver les noms et attributs des balises. Nous examinerons également des exemples de téléchargement et d'analyse HTML à partir d'un fichier et de n'importe quelle URL, telle que la page d'accueil de Google.

Qu'est-ce que Jsoup

Jsoup est une bibliothèque Java open source permettant de travailler avec du vrai HTML. Il fournit une API très pratique pour récupérer et manipuler des données en utilisant les meilleures techniques de type DOM, CSS et jQuery. Jsoup implémente la spécification WHATWG HTML5 et analyse le HTML dans le même DOM que le font les navigateurs modernes comme Chrome et Firefox. Voici quelques-unes des fonctionnalités utiles de la bibliothèque Jsoup :
  • Jsoup peut extraire et analyser le HTML à partir d'une URL, d'un fichier ou d'une chaîne.
  • Jsoup peut rechercher et extraire des données à l'aide du parcours DOM ou des sélecteurs CSS.
  • Jsoup vous permet de manipuler des éléments HTML, des attributs et du texte.
  • Jsoup fournit une désinfection par liste blanche des informations fournies par l'utilisateur pour empêcher les attaques XSS.
  • Jsoup produit également du HTML « soigné ».
Jsoup est conçu pour fonctionner avec les différents types de HTML qui existent dans le monde réel, y compris le HTML correctement validé avec un ensemble de balises incomplet et non validé. L'un des principaux avantages de Jsoup est sa fiabilité.

Analyser du HTML en Java à l'aide de Jsoup

Dans ce didacticiel, nous verrons trois exemples différents d'analyse et de parcours d'un document HTML en Java à l'aide de Jsoup. Dans le premier exemple, nous analyserons une chaîne HTML contenant des balises sous la forme d'une chaîne littérale Java. Dans le deuxième exemple, nous téléchargerons notre document HTML depuis Internet et dans le troisième exemple, nous téléchargerons notre propre exemple de fichier HTML login.html pour l'analyser. Ce fichier est un exemple de document HTML composé d'une balise « title » et d'une balise « div » dans la section « body » qui contient le formulaire HTML. Le formulaire contient des champs pour saisir un nom d'utilisateur et un mot de passe, ainsi que des boutons de réinitialisation et de confirmation pour d'autres actions. Il s'agit d'un code HTML « correct » qui peut passer le contrôle de « validité », ce qui signifie que toutes les balises et attributs sont correctement fermés. Voici à quoi ressemble notre fichier 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>
Avec Jsoup, il est très simple d'analyser le HTML, tout ce que vous avez à faire est d'appeler une méthode statique Jsoup.parse()et de lui transmettre votre chaîne HTML. Jsoup fournit plusieurs méthodes surchargées parse()pour lire du HTML à partir d'une chaîne, d'un fichier, d'un URI de base, d'une URL et d'un fichier InputStream. Vous pouvez également spécifier l'encodage pour lire correctement le fichier HTML s'il n'est pas au format UTF-8. La méthode parse(String html)analyse le HTML entrant dans un nouvel objet Document. Dans Jsoup, une classe Documenthérite d'une classe Element, qui étend la classe Node. La classe Nodehérite également de la classe TextNode. Tant que vous transmettez une chaîne non nulle à la méthode, vous êtes assuré d'avoir une analyse réussie et significative d'un objet Documentcontenant (au moins) les éléments "head" et "body". Si vous avez un objet Document, vous pouvez obtenir les données souhaitées en appelant les méthodes appropriées de la classe Documentet de ses parents Elementet Node.

Programme Java pour analyser un document HTML

Voici notre programme complet pour analyser une chaîne HTML, un fichier HTML téléchargé sur Internet et un fichier HTML local. Pour l'exécuter, vous pouvez utiliser un IDE (Eclipse ou tout autre) ou la ligne de commande. Dans Eclipse, c'est très simple, copiez simplement ce code, créez un nouveau projet Java, faites un clic droit sur le dossier "src" et collez le code copié. Eclipse se chargera de créer le package approprié et le fichier de code source avec le nom approprié, c'est donc beaucoup moins de travail. Si vous avez déjà un projet Java, ce n'est qu'une étape. Le programme ci-dessous illustre trois exemples d'analyse et de parcours d'un fichier HTML. Dans le premier exemple, nous analysons directement une chaîne contenant du HTML, dans le second un fichier HTML téléchargé depuis une URL, dans le troisième nous téléchargeons et analysons un document HTML depuis le système de fichiers local.
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);
    }
}
Sortir:
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
L'analyseur HTML Jsoup fera tout son possible pour produire une analyse « propre » du code HTML que vous fournissez, qu'il soit bien formé ou non. Il peut gérer les erreurs suivantes :
  • balises non fermées. Par exemple,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • balises implicites. Par exemple, ceux qui sont ouverts <td>Java is Great</td>seront emballés dans<table><tr><td>
  • Jsoup crée des structures de document robustes (le HTML contient la tête et le corps, mais le corps ne contient que les éléments pertinents)
Jsoup est une bibliothèque open source excellente et fiable qui facilite la lecture de documents HTML, de fragments de corps, de chaînes HTML et l'analyse directe du contenu Web HTML.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION