Grattoir Web C#

Web Scraping, également connu sous le nom de web crawling, web harvesting ou data scraping, est utilisé pour extraire des données de sites Web. Un grattoir Web utilise différents sélecteurs de données tels que des sélecteurs CSS, XPath ou les deux afin d’extraire des données des pages Web. Ces deux sélecteurs sont efficaces pour collecter et analyser des informations sur le Web. Cet article explique comment créer un grattoir Web en C#, en particulier les informations sur la navigation HTML, la requête XPath et le sélecteur CSS.

Configuration de la bibliothèque de grattage Web C#

Aspose.HTML for .NET est une bibliothèque de grattage Web qui peut être facilement configurée en téléchargeant les fichiers DLL de référence à partir de la section Nouvelles versions ou en exécutant la commande d’installation NuGet suivante :

PM> Install-Package Aspose.Html

Scraping Web avec navigation HTML en C#

Vous pouvez utiliser différentes propriétés de la classe Node pour naviguer dans les documents HTML. L’extrait de code ci-dessous explique comment naviguer dans une page Web HTML en C# :

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

// Initialiser un document à partir du code préparé
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Obtenir la référence au premier enfant (premier SPAN) du BODY
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Obtenir la référence à l'espace blanc entre les éléments html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Obtenir la référence au deuxième élément SPAN
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspection du document HTML et de ses éléments

L’API fournit également l’utilisation généralisée des fonctionnalités de traversée d’éléments. L’extrait de code suivant montre comment effectuer une inspection détaillée des différents éléments de l’API.

//Charger un document à partir d'un fichier
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Spécifiez le chemin d'accès au fichier HTML source dans votre système de fichiers local
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Obtenir l'élément html du document
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Obtenir le dernier élément de l'élément html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Obtenir le premier élément de l'élément body
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Utilisation de filtres personnalisés pour Web Scraper en C#

Vous pouvez implémenter un filtre personnalisé à l’aide d’un objet d’interface ITreeWalker ou INodeIterator avec une implémentation de filtre personnalisé. L’extrait de code suivant explique comment suivre le processus :

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Le filtre actuel ignore tous les éléments, à l'exception des éléments IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Après avoir implémenté un filtre personnalisé, vous pouvez parcourir rapidement une page Web avec le code suivant :

var code = @"
    <p>Hello</p>
    <img src='image1.png'>
    <img src='image2.png'>
    <p>World!</p>";

// Initialiser un document basé sur le code préparé
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // 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
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        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.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // sortie : image1.png
            // sortie : image2.png
        }
    }
}

Web Scraping à l’aide de la requête XPath en C#

XPath peut être utilisé pour extraire des données de documents HTML. L’extrait de code suivant explique comment utiliser XPath Query pour le scraping Web en C# :

// Préparer le code HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Initialiser un document basé sur le code préparé
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // 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' :
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Itérer sur les nœuds résultants
    for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // sortie : Bonjour
        // sortie : Monde !
    }
}

Web Scraping avec CSS Selector en C#

Vous pouvez créer un modèle de recherche pour faire correspondre des éléments dans une arborescence de documents basée sur la syntaxe des sélecteurs CSS. L’extrait de code ci-dessous explique comment effectuer du scraping Web avec CSS Selector en C# :

// Préparer le code HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Initialiser un document basé sur le code préparé
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // 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
    var elements = document.QuerySelectorAll(".happy span");

    // Itérer sur la liste d'éléments résultante
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // sortie : Bonjour
        // sortie : Monde !
    }
}

Obtenez une licence gratuite

Vous pouvez demander une licence temporaire gratuite pour évaluer l’API dans toute sa capacité.

Conclusion

Dans cet article, vous avez découvert la bibliothèque de grattage Web C#, Aspose.HTML for .NET, qui comprend plusieurs méthodes pour créer un grattoir Web en C#. Il traite de la navigation HTML, de la requête XPath, ainsi que de la méthode de sélection CSS pour répondre à vos besoins. Toutefois, si vous avez besoin de discuter de l’une de vos préoccupations ou questions, veuillez nous écrire sur le forum.

Voir également