JSOUP – Parser du HTML sous Android

jsoup_long

Introduction

Pour l’une de mes applications, je me suis mis à chercher les matchs d’une équipe de foot, malheureusement, je n’ai pu trouvé une API me les fournissants gratuitement.

Une seule solution s’offrait alors à moi : parser le contenu d’une page HTML. Je vous avoue que j’ai hésité à abandonner le développement de l’application car pour moi, parser une page me semblait être laborieux.

Mais bon, avant d’abandonner on fait toujours des petites recherches et celles-ci on était fructueuse. Je suis tombé sur un post sur stackoverflow (si vous ne connaissez pas je vous conseille d’y faire un tour) qui parlait d’une librairie du nom de JSoup.

JSoup est une librairie permettant de parser du contenu HTML.

Notons que cette librairie est open-source sous licence MIT, je vous laisse le lien GitHub si vous voulez y jeter un oeil https://github.com/jhy/jsoup/

Importer la librairie

Avant de vous expliquer le fonctionnement, il faut bien entendu importer la librairie. Comme toujours, je vous conseille de l’importer avec gradle. Voici la ligne à insérer dans votre fichier build.gradle

compile 'org.jsoup:jsoup:1.7.2'

 Fonctionnement de la librairie

La librairie fonctionne de manière très simple. Elle se base sur les méthodes de DOM, CSS et jquery.

Pour récupérer le contenu d’une page, nous allons nous connecter avec son URL à l’aide de la méthode connect et obtenir le résultat de la page dans un objet Document à l’aide de la méthode get.

Voici un exemple avec l’URL de la page tutos-android-france

Document document = Jsoup.connect("http://tutos-android-france.com/").get();

L’objet document contient maintenant la page HTML, il offre alors plusieurs méthodes permettant de récupérer le contenu souhaité. Je vais en faire une liste mais je vous laisserais en bas du tutoriel la page officiel jsoup contenant toutes les méthodes :

  • getElementsByClass, permet de récupérer les éléments de la page par une classe CSS
  • getElementsByTag, permet de récupérer les éléments de la page par un tag HTML, par exemple img
  • getElementsById, permet de récupérer les éléments de la page par son id

Toutes ces méthodes, nous retournent un objet Elements qui est en faite une liste d’éléments. Chaque objet Element vous offres aussi les méthodes que j’ai cité ci-dessus. Je vais vous citer trois autres méthodes que j’ai trouvé plutôt pratique :

  • absUrl(String attributeKey), permet de récupérer le lien de l’image contenu dans la balise img, par exemple element.absUrl(“src”).
  • attr(String attributeKey), permet de récupérer le contenu en fonction d’un attribut
  • text(), permet de récupérer le texte contenu dans une balise, par exemple si avez du text entre deux balises <p>

 

Voilà vous savez maintenant parser une page HTML simplement. Voici la page officielle de JSoup pour en connaître plus sur la librairie http://jsoup.org/

Un petit exercice pour vous ! Essayez d’afficher la page d’accueil dans une application, enfin afficher simplement une liste contenant tout les tutoriels de la page d’accueil avec une photo, un titre et une description par item

Voici ce que vous devez obtenir !

jsoup copie

 

Je vous laisse aussi une correction de cet exercice sur le lien suivant :

https://github.com/florent37/TutosAndroidFrance/tree/master/JsoupSample

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *