JsoupCommencer avec Jsoup

Remarques

Jsoup est une bibliothèque d'analyse de données et d'extraction de données HTML pour Java, axée sur la flexibilité et la facilité d'utilisation. Il peut être utilisé pour extraire des données spécifiques des pages HTML, communément appelées "web scraping", ainsi que pour modifier le contenu des pages HTML et "nettoyer" le code HTML non approuvé avec une liste blanche de balises et d'attributs autorisés.

Support JavaScript

Jsoup ne prend pas en charge JavaScript et, de ce fait, aucun contenu généré dynamiquement ou ajouté à la page après le chargement de la page ne peut être extrait de la page. Si vous devez extraire du contenu qui est ajouté à la page avec JavaScript, il existe quelques options alternatives:

  • Utilisez une bibliothèque qui prend en charge JavaScript, telle que Selenium, qui utilise un navigateur Web réel pour charger des pages, ou HtmlUnit.

  • Reverse engineering de la façon dont la page charge ses données. En règle générale, les pages Web qui chargent des données dynamiquement le font via AJAX, et vous pouvez donc consulter l'onglet réseau des outils de développement de votre navigateur pour voir d'où proviennent les données, puis utiliser ces URL dans votre propre code. Voyez comment gratter les pages AJAX pour plus de détails.

Site officiel et documentation

Vous pouvez trouver diverses ressources liées à Jsoup sur jsoup.org , y compris Javadoc , des exemples d'utilisation dans le livre de recettes Jsoup et des téléchargements JAR . Consultez le référentiel GitHub pour le code source, les problèmes et les demandes d'extraction.

Télécharger

Jsoup est disponible sur Maven en tant que org.jsoup.jsoup:jsoup , Si vous utilisez Gradle (par exemple avec Android Studio), vous pouvez l'ajouter à votre projet en ajoutant ce qui suit à votre section de dépendances build.gradle :

compile 'org.jsoup:jsoup:1.8.3'

Si vous utilisez Ant (Eclipse), ajoutez ce qui suit à votre section dépendances POM:

<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.8.3</version>
</dependency>

Jsoup est également disponible en tant que JAR téléchargeable pour d'autres environnements.

Versions

Version Date de sortie
1.9.2 2016-05-17
1.8.3 2015-08-02

Extraire les URL et les titres des liens

Jsoup peut être utilisé pour extraire facilement tous les liens d'une page Web. Dans ce cas, nous pouvons utiliser Jsoup pour extraire uniquement les liens spécifiques que nous voulons, ici, ceux d'un en-tête h3 sur une page. Nous pouvons également obtenir le texte des liens.

Document doc = Jsoup.connect("http://stackoverflow.com").userAgent("Mozilla").get();
for (Element e: doc.select("a.question-hyperlink")) {
    System.out.println(e.attr("abs:href"));
    System.out.println(e.text());
    System.out.println();
}

Cela donne la sortie suivante:

http://stackoverflow.com/questions/12920296/past-5-week-calculation-in-webi-bo-4-0
Past 5 week calculation in WEBI (BO 4.0)?

http://stackoverflow.com/questions/36303701/how-to-get-information-about-the-visualized-elements-in-listview
How to get information about the visualized elements in listview?

[...]

Qu'est-ce qu'il se passe ici:

  • Tout d'abord, nous obtenons le document HTML à partir de l'URL spécifiée. Ce code définit également l’en-tête de l’agent utilisateur de la requête sur "Mozilla", de sorte que le site Web serve la page qu’il sert généralement aux navigateurs.

  • Ensuite, utilisez select(...) et une boucle for pour obtenir tous les liens vers les questions Stack Overflow, dans ce cas les liens ayant la classe question-hyperlink .

  • Imprimez le texte de chaque lien avec .text() et le href du lien avec attr("abs:href") . Dans ce cas, nous utilisons abs: pour obtenir l'URL absolue , c.-à-d. avec le domaine et le protocole inclus.

Extraire l'URL complète du code HTML partiel

Sélectionner uniquement la valeur d'attribut d'un lien: href renvoie l'URL relative.

   String bodyFragment = 
          "<div><a href=\"/documentation\">Stack Overflow Documentation</a></div>";


    Document doc = Jsoup.parseBodyFragment(bodyFragment);
    String link = doc
            .select("div > a")
            .first()
            .attr("href");
    
    System.out.println(link);

Sortie

/documentation

En transmettant l'URI de base dans la méthode d' parse et en utilisant la méthode absUrl au lieu de la méthode attr , nous pouvons extraire l'URL complète.

    Document doc = Jsoup.parseBodyFragment(bodyFragment, "http://stackoverflow.com");
    
    String link = doc
                .select("div > a")
                .first()
                .absUrl("href");
    
    System.out.println(link);

Sortie

http://stackoverflow.com/documentation

Extraire les données du fichier de document HTML

Jsoup peut être utilisé pour manipuler ou extraire des données d'un fichier local contenant du code HTML. filePath est le chemin d'un fichier sur le disque. ENCODING est le nom du jeu de caractères souhaité, par exemple "Windows-31J". C'est facultatif.

 // load file
    File inputFile = new File(filePath);
    // parse file as HTML document
    Document doc = Jsoup.parse(filePath, ENCODING);
    // select element by <a> 
    Elements elements = doc.select("a");