Le HTML est le cœur du WEB. Toutes les pages que vous voyez sur Internet sont du HTML, qu'elles soient générées dynamiquement par JavaScript, JSP, PHP, ASP ou d'autres technologies WEB. Votre navigateur analysera le code HTML et le restituera pour vous. Mais que se passe-t-il si vous devez analyser vous-même le document HTML dans un programme Java et rechercher certains éléments, balises, attributs ou vérifier si un élément spécifique existe ? Si vous programmez en Java depuis de nombreuses années, je pense que vous devez avoir essayé d'analyser XML et utilisé des analyseurs comme DOM ou SAX, mais il est très probable que vous n'ayez jamais effectué de travail d'analyse HTML. Ce qui est encore plus ironique, c'est que dans les applications Java, il est très rare que vous ayez besoin d'analyser des documents HTML, et cela n'inclut pas les servlets ou autres technologies Java WEB. Ce qui est pire, c'est que le noyau du JDK n'inclut pas de bibliothèques HTTP ou HTML, du moins je ne les connais pas. C'est pourquoi, lorsqu'il s'agit d'analyser des fichiers HTML, de nombreux programmeurs Java doivent d'abord consulter Google pour voir comment extraire une balise HTML en Java. Lorsque j'ai eu ce besoin, je pensais qu'il y aurait des bibliothèques open source qui pourraient y parvenir, mais je ne m'attendais pas à ce qu'il existe une bibliothèque aussi cool et entièrement fonctionnelle que JSoup. Il prend non seulement en charge la lecture et l'analyse des documents HTML, mais vous permet également d'extraire tous les éléments des fichiers HTML, ainsi que leurs attributs et propriétés CSS, et vous pouvez également les modifier. Avec JSoup, vous pouvez faire presque tout avec des documents HTML. Nous verrons un exemple de comment télécharger et analyser un fichier HTML à partir de la page d'accueil de Google ou de n'importe quelle URL en Java.
Qu'est-ce que la bibliothèque JSoup
Jsoup est une bibliothèque Java open source qui peut être utilisée pour traiter du HTML dans des applications pratiques. Il fournit une API très pratique pour l'extraction et la modification des données, tirant pleinement parti des avantages des méthodes de style DOM, CSS et jquery. Jsoup implémente la spécification WAHTWG HTML5, et le DOM qu'il analyse à partir du HTML est exactement le même que celui analysé par les navigateurs modernes tels que Chrome et Firefox. Voici quelques fonctionnalités utiles de la bibliothèque Jsoup :
1.Jsoup peut obtenir et analyser du HTML à partir d'une URL, d'un fichier ou d'une chaîne.
2.Jsoup peut rechercher et extraire des données à l'aide de la traversée DOM ou des sélecteurs CSS.
3. Vous pouvez utiliser Jsoup pour modifier des éléments HTML, des attributs et du texte.
4.Jsoup garantit que le contenu soumis par les utilisateurs est propre grâce à une liste blanche sécurisée pour empêcher les attaques XSS.
5.Jsoup peut également générer du HTML soigné.
Jsoup est conçu pour gérer toutes sortes de HTML différents qui apparaissent dans la vie réelle, y compris le HTML correct et valide ainsi que les collections de balises incomplètes et invalides. L'un des principaux atouts de Jsoup est sa robustesse.
Utiliser Jsoup pour l'analyse HTML en Java
Dans ce didacticiel d'analyse HTML Java, nous verrons trois exemples différents d'utilisation de Jsoup pour analyser et parcourir du HTML en Java. Dans le premier exemple, nous analyserons une chaîne HTML dont le contenu est une balise composée de chaînes littérales en Java. Dans le deuxième exemple, nous téléchargerons le document HTML depuis le WEB, et dans le troisième exemple, nous chargerons un exemple de fichier HTML login.html pour l'analyse. Ce fichier est un exemple de document HTML. Il contient une balise de titre et une balise div à l'intérieur du corps, qui contient un formulaire. Il comporte des balises d'entrée pour obtenir des noms d'utilisateur et des mots de passe, ainsi que des boutons de soumission et de réinitialisation pour l'étape suivante. Il s'agit d'un code HTML correct et valide, c'est-à-dire que toutes les balises et attributs sont correctement fermés. Voici notre exemple de fichier HTML :
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<tête>
<méta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Page de connexion</title>
</tête>
<corps>
<div id="connexion" >
<form action="login.do">
Nom d'utilisateur : <input id="username" type="text" /><br>
Mot de passe : <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</form>
</div>
</corps>
</html>
Utiliser Jsoup pour analyser du HTML est très simple, il vous suffit d'appeler sa méthode statique Jsoup.parse() et de lui transmettre votre chaîne HTML. Jsoup fournit plusieurs méthodes parse() surchargées, qui peuvent lire des fichiers HTML à partir de chaînes, de fichiers, d'URI, d'URL et même d'InputStreams. S'il ne s'agit pas d'un encodage UTF-8, vous pouvez également spécifier l'encodage des caractères afin que le fichier HTML puisse être lu correctement. Vous trouverez ci-dessous une liste complète des méthodes d'analyse HTML de la bibliothèque Jsoup. La méthode parse(String html) analyse le code HTML d'entrée dans un nouveau document. Dans Jsoup, Document hérite d'Element, qui à son tour hérite de Node. Le même TextNode hérite également de Node. Tant que vous transmettez une chaîne non nulle, vous obtiendrez certainement une analyse réussie et significative et obtiendrez un document contenant des éléments de tête et de corps. Une fois que vous obtenez ce document, vous pouvez appeler les méthodes appropriées sur Document et ses classes parents Element et Node pour obtenir les données souhaitées.
Programme Java qui analyse les documents HTML
Vous trouverez ci-dessous un programme Java complet qui analyse les chaînes HTML, les fichiers HTML téléchargés sur Internet et les fichiers HTML dans le système de fichiers local. Vous pouvez utiliser Eclipse IDE ou un autre IDE ou même des commandes pour exécuter ce programme. Dans Eclipse, c'est très simple. Copiez simplement ce code, créez un nouveau projet Java, cliquez avec le bouton droit sur le package src et collez-le. Eclipse créera le package correct et le fichier source Java portant le même nom, la charge de travail est donc minime. Si vous disposez déjà d’un exemple de projet Java, une seule étape est requise. Le programme Java suivant montre trois exemples différents d'analyse et de parcours de fichiers HTML. Dans le premier exemple, nous analysons directement une chaîne avec du contenu HTML, dans le deuxième exemple, nous analysons un fichier HTML téléchargé à partir d'une URL et dans le troisième exemple, nous chargeons un document HTML à partir du système de fichiers local et l'analysons. La méthode parse est utilisée dans les premier et troisième exemples pour obtenir un objet Document, que vous pouvez interroger pour extraire n'importe quelle valeur de balise ou valeur d'attribut. Dans le deuxième exemple, nous utilisons la méthode Jsoup.connect, qui va créer une connexion URL, télécharger le HTML et l'analyser. Cette méthode renverra également un document, qui pourra être utilisé pour des requêtes ultérieures et obtenir la valeur d'une balise ou d'un attribut.
Copiez le code comme suit :
importer java.io.IOException ;
importer org.jsoup.Jsoup ;
importer org.jsoup.nodes.Document ;
importer org.jsoup.nodes.Element ;
/**
[*] Programme Java pour analyser/lire des documents HTML à partir d'un fichier à l'aide de la bibliothèque Jsoup.
[*] Jsoup est une bibliothèque open source qui permet aux développeurs Java d'analyser le HTML
[*] fichiers et extraire des éléments, manipuler des données, changer de style à l'aide de DOM, CSS et
[*] Méthode de type JQuery.
[*]
[*] @auteur Javin Paul
[*]/
classe publique HTMLParser{
public static void main(String args[]) {
// Analyser la chaîne HTML à l'aide de la bibliothèque JSoup
Chaîne HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<tête>"
+ "<title>Exemple JSoup</title>"
+ "</tête>"
+ "<corps>"
+ "|[b]BonjourMonde[/b]"
+ ""
+ "</corps>"
+ "</html>" ;
Document html = Jsoup.parse(HTMLSTring);
Titre de la chaîne = html.title();
Chaîne h1 = html.body().getElementsByTag("h1").text();
System.out.println("Saisissez la chaîne HTML dans JSoup :" + HTMLSTring);
System.out.println("Après analyse, Titre : " + titre);
System.out.println("Après analyse, Titre : " + h1);
// Exemple JSoup 2 - Lecture d'une page HTML à partir d'une URL
Documentation ;
essayer {
doc = Jsoup.connect("http://google.com/").get();
titre = doc.titre();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Jsoup Peut lire une page HTML à partir d'une URL, titre : " + titre);
// Exemple JSoup 3 - Analyse d'un fichier HTML en Java
//Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // faux
Document htmlFichier = null ;
essayer {
htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
} catch (IOException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
} // droite
titre = htmlFile.title();
Élément div = htmlFile.getElementById("login");
String cssClass = div.className(); // obtention d'un élément HTML du formulaire de classe
System.out.println("Jsoup peut également analyser directement le fichier HTML");
System.out.println("titre : " + titre);
System.out.println("classe de balise div : " + cssClass);
}
}
Sortir:
Copiez le code comme suit :
Saisissez une chaîne HTML dans JSoup :<!DOCTYPE html><html><head><title>Exemple JSoup</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
Après analyse, titre : exemple JSoup
Après l'analyse, titre : HelloWorld
Jsoup Peut lire une page HTML à partir d'une URL, titre : Google
Jsoup peut également analyser directement le titre du fichier HTML : Page de connexion
classe de balise div : simple
L’avantage de Jsoup est qu’il est très robuste. L'analyseur HTML Jsoup analysera le code HTML que vous fournissez aussi proprement que possible, que le code HTML soit bien formé ou non. Il peut gérer des erreurs telles que des balises non fermées (par exemple, Java <p>Scala à <p>JavaScala), des balises implicites (par exemple, un simple |Java is Great enveloppé dans |), et il peut toujours créer une structure de document (HTML y compris la tête et le corps, et seuls les éléments corrects seront inclus dans la tête). C'est ainsi que le HTML est analysé en Java. Jsoup est une excellente et robuste bibliothèque open source qui facilite la lecture de documents HTML, de fragments de corps, de chaînes HTML et l'analyse de contenu HTML directement à partir du WEB. Dans cet article, nous avons appris comment obtenir une balise HTML spécifique en Java, car dans le premier exemple, nous avons extrait la valeur des balises title et H1 en texte, et dans le troisième exemple, nous avons appris comment l'obtenir via Extraire les propriétés CSS pour obtenez les valeurs de propriété à partir des balises HTML. En plus de la puissante méthode html.body().getElementsByTag("h1").text() de style jQuery, vous pouvez également extraire des balises HTML arbitraires et fournit également des fonctions telles que Document.title() et Element.className( ) Méthode pratique, vous pouvez obtenir rapidement le titre et la classe CSS. J'espère que vous vous amuserez avec JSoup et nous verrons bientôt d'autres exemples de cette API.