JavaRush /Blog Java /Random-FR /Analyse HTML facile avec jsoup
Stanislav
Niveau 21
Москва

Analyse HTML facile avec jsoup

Publié dans le groupe Random-FR
Peut-être qu'un jour vous aurez besoin d'obtenir des informations à partir d'un site Web ou d'un document HTML dans votre application, et je dirai sans plus tarder que l'utilisation de la bibliothèque jsoup simplifiera grandement votre tâche. Selon le wiki , jsoup est une bibliothèque Java open source conçue pour analyser, extraire et manipuler les données stockées dans des documents HTML.

Départ rapide

La bibliothèque peut être téléchargée sous forme de fichier jar et placée dans un projet, ou connectée à l'aide de Maven/Gradle. Je laisserai un lien vers le site officiel à la fin de l'article : vous y trouverez la version actuelle de la bibliothèque. Dans l'exemple nous utiliserons la connexion via Maven. Ajoutons une dépendance :
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Usage

Tout d'abord, vous devez obtenir une instance de la classe Documentà partir de org.jsoup.nodes.Document indiquant la source de l'analyse. Il peut s'agir d'un fichier local ou d'un lien. Par exemple, dans cet article, nous utiliserons le site Web yandex.ru et essaierons d'obtenir leur fil d'actualité actuel :
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentest un identifiant qui est communiqué au site visité. Sur de nombreux sites, c'est le critère le plus important pour le filtre antispam. Referrercontient l'URL de la source de la requête. La méthode get()renvoie une IOException gérée, afin que nous puissions tout envelopper dans try/catchun bloc, ou simplement la lancer plus loin avec throws. Nous avons maintenant reçu le code source de cette page. Si nécessaire, la bibliothèque jsoup elle-même peut restaurer les éléments endommagés. Il ne nous reste plus qu'à limiter la recherche à un bloc distinct. La méthode select()a un large choix d'utilisations : elle permet de rechercher des éléments par balise, attributs, classe et autres paramètres. Presque tous les navigateurs modernes prennent en charge la possibilité de rechercher rapidement le code source d'un élément sélectionné. Avec des manipulations simples, nous trouvons le code source de l'élément dont nous avons besoin et obtenons divun bloc avec la classe spécifiée, que nous utiliserons pour l'échantillonnage. Analyse HTML facile à l'aide de jsoup - 1Utilisons la classe Elementsde org.jsoup.select.Elements pour sélectionner tous les éléments de notre bloc sélectionné.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Nous avons maintenant quelque chose comme ceci : Analyse HTML facile à l'aide de jsoup - 2Il ne nous reste plus qu'à utiliser une petite boucle pour parcourir tous les éléments :
for (Element element : listNews.select("a"))
            System.out.println(element.text());
La méthode text()vous permet de supprimer le code de balisage et ne laisse qu'une combinaison de texte pour tous les éléments entrants. Le résultat de l'exécution sera le suivant : Analyse HTML facile à l'aide de jsoup - 3Il est facile de constater que le nombre réel de lignes reçues ne correspond pas à l'affichage réel sur la page. C’est là que résident les pièges. Si vous regardez le code source du balisage, vous remarquerez que les dernières nouvelles changent de manière animée à un certain intervalle de temps. Certains de ces « problèmes » sont résolus par des échantillonnages supplémentaires et, bien sûr, par des tests. Il se peut que les cinq premiers éléments contiennent les informations dont nous avons besoin et que le sixième élément ne contienne qu'une ligne vide scriptée. Il arrive aussi que des blocs n'aient pas d'identifiant, il est alors possible de pointer directement grâce à une méthode get(int index)le numéro de position de l'élément en question.
System.out.println(listNews.select("a").get(2).text());

Conclusion

Cet exemple ne montre qu'une petite partie de ce dont jsoup est capable. Il y a aussi le fait que les sites sont souvent mis à jour, ce qui modifie la structure du code de balisage. Par conséquent, lorsque vous travaillez avec le scraping, vous devez être prêt à vous adapter aux changements. Vous pouvez obtenir plus d'informations et la version actuelle sur le site officiel jsoup.org ; vous pouvez en savoir plus sur les classes et les méthodes sur o7planning.org . Je vais laisser un lien vers mon github , au moment de la rédaction de cet article, plusieurs robots Telegram utilisent Jsoup pour recevoir et afficher des informations.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION