Gratte-Web Java

Le Web Scraping est également appelé data scraping, web harvesting ou web crawling qui est utilisé pour extraire des données des pages Web. Un web scraper peut utiliser différentes approches pour extraire des informations. Par exemple, XPath, les sélecteurs CSS, les filtres personnalisés, la navigation HTML, etc. Conformément à ces scénarios, cet article explique comment créer un grattoir Web par programme en Java.

Configuration de la bibliothèque Java Web Scraping

Aspose.HTML for Java L’API prend en charge des fonctionnalités de grattage Web utilisant différentes techniques. Vous pouvez simplement accéder à l’API en téléchargeant les fichiers JAR depuis la page Téléchargements ou utiliser les configurations Maven suivantes dans le fichier pom.xml de votre projet :

Repository:

 <repositories>
     <repository>
         <id>snapshots</id>
         <name>repo</name>
         <url>http://repository.aspose.com/repo/</url>
     </repository>
</repositories>

Dependency:

 <dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>21.12</version>
        <classifier>jdk17</classifier>
    </dependency>
</dependencies>

Scraping Web avec navigation HTML en Java

Vous pouvez travailler avec la classe Node pour naviguer dans les pages HTML. L’extrait de code ci-dessous montre comment naviguer dans un document HTML en Java :

// Préparer un code HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// Initialiser un document à partir du code préparé
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Obtenir la référence au premier enfant (premier SPAN) du BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Obtenir la référence au deuxième élément SPAN
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Inspection du document HTML et de ses éléments en Java

Vous pouvez utiliser la méthode de traversée d’élément pour naviguer dans les pages HTML. L’exemple de code ci-dessous explique comment inspecter les documents HTML en Java.

// Charger un document à partir d'un fichier
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Obtenir l'élément html du document
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Obtenir le dernier élément de l'élément html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Obtenir le premier élément de l'élément body
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Utilisation de filtres personnalisés pour Web Scraper en Java

Vous pouvez définir un filtre personnalisé pour ignorer ou accepter des filtres spécifiques pour travailler avec le grattoir Web en Java. L’exemple de code ci-dessous explique comment utiliser les filtres personnalisés ou définis par l’utilisateur dans un grattoir Web à l’aide de Java :

public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Le filtre actuel ignore tous les éléments, à l'exception des éléments IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Par la suite, après avoir configuré un filtre personnalisé, vous pouvez facilement naviguer dans une page HTML à l’aide de l’extrait de code ci-dessous :

// Préparer un code HTML
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Initialiser un document basé sur le code préparé
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Pour démarrer la navigation HTML, nous devons créer une instance de TreeWalker.
    // Les paramètres spécifiés signifient qu'il commence à marcher à partir de la racine du document, en itérant tous les nœuds et en utilisant notre implémentation personnalisée du filtre
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Utilisation
    while (iterator.nextNode() != null) {
        // Puisque nous utilisons notre propre filtre, le nœud actuel sera toujours une instance de HTMLImageElement.
        // Nous n'avons donc pas besoin des validations supplémentaires ici.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // sortie : image1.png
        // sortie : image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping à l’aide de XPath Query en Java

Vous pouvez sélectionner différents nœuds d’un document HTML selon différents critères à l’aide de XPath. Le code ci-dessous montre comment effectuer un scraping Web à l’aide de XPath Query en Java :

// Préparer un code HTML
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello ! </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World </span >\n" +
              "    </p >\n";

// Initialiser un document basé sur le code préparé
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Ici, nous évaluons l'expression XPath où nous sélectionnons tous les éléments SPAN enfants parmi les éléments dont l'attribut 'class' est égal à 'happy' :
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Itérer sur les nœuds résultants
    for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // sortie : Bonjour
        // sortie : Monde !
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping avec CSS Selector en Java

Vous pouvez rechercher les éléments nécessaires dans un grattoir Web à l’aide du sélecteur CSS. Vous pouvez spécifier un paramètre en tant que sélecteur de requête, puis une liste correspondant au sélecteur est renvoyée au grattoir Web. L’exemple de code suivant montre comment utiliser le sélecteur CSS dans un grattoir Web à l’aide de Java :

// Préparer un code HTML
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World ! </span >\n" +
              "    </p >\n";

// Initialiser un document basé sur le code préparé
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Ici, nous créons un sélecteur CSS qui extrait tous les éléments dont l'attribut 'class' est égal à 'happy' et leurs éléments SPAN enfants
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Itérer sur la liste d'éléments résultante
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // sortie : Bonjour
        // sortie : Monde !
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Conclusion

Dans cet article, vous avez exploré différentes méthodes qui peuvent être utilisées pour créer un web scraper en Java. Il vous suffit d’effectuer quelques appels d’API à l’aide de la bibliothèque Aspose.HTML for Java pour créer un grattoir Web en Java. Vous pouvez explorer les techniques de navigation HTML, de sélecteur CSS, de filtre personnalisé et de requête XPath dans cet article. De plus, n’hésitez pas à nous contacter via le forum si vous avez besoin de plus d’informations ou d’assistance.

Voir également

Convertir EPUB en XPS en Java