Parsing HTML en C# (.NET) : bibliothèques HtmlAgilityPack et AngleSharp

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Parsing HTML en C# (.NET) : aperçu des bibliothèques HtmlAgilityPack et AngleSharp



Le parsing HTML est l'une des tâches clés lors du développement de scrapers web, d'analyseurs de contenu et d'outils d'automatisation. Dans l'écosystème C# (.NET), il existe plusieurs bibliothèques matures qui permettent d'extraire des données de documents HTML, de manipuler l'arbre DOM et d'effectuer des requêtes sur les éléments. Dans cet article, nous examinerons en détail les deux bibliothèques les plus populaires : HtmlAgilityPack et AngleSharp, leurs fonctionnalités, leur syntaxe et des exemples d'utilisation.



1. HtmlAgilityPack — un outil éprouvé par le temps



HtmlAgilityPack (HAP) est l'une des bibliothèques les plus anciennes et les plus répandues pour le parsing HTML en .NET. Elle prend en charge à la fois .NET Framework et .NET Core / .NET 5+. Son principal avantage est la simplicité et la tolérance aux pannes lors du traitement de HTML « sale » (balisage invalide, balises non fermées).



Installation

// Via NuGet Package ManagerInstall-Package HtmlAgilityPack

// Ou via .NET CLIdotnet add package HtmlAgilityPack


Exemple de base : extraction des titres H1

using HtmlAgilityPack;

string html = @"<html><body> <h1>Titre 1</h1> <h1>Titre 2</h1> <p>Texte du paragraphe</p></body></html>";

var doc = new HtmlDocument();doc.LoadHtml(html);

var h1Nodes = doc.DocumentNode.SelectNodes("//h1");if (h1Nodes != null){ foreach (var node in h1Nodes) { Console.WriteLine(node.InnerText.Trim()); }}// Sortie :// Titre 1// Titre 2


Utilisation de XPath et des sélecteurs CSS

HtmlAgilityPack utilise par défaut XPath pour la navigation. Cependant, avec le package HtmlAgilityPack.CssSelectors, il est possible d'utiliser des sélecteurs CSS :

// Installation : dotnet add package HtmlAgilityPack.CssSelectorsusing HtmlAgilityPack.CssSelectors;

// ... après le chargement du documentvar links = doc.DocumentNode.QuerySelectorAll("a.external-link");foreach (var link in links){ Console.WriteLine(link.GetAttributeValue("href", ""));}


Parsing d'un site réel

using System.Net.Http;using HtmlAgilityPack;

var url = "https://example.com/articles";var httpClient = new HttpClient();var html = await httpClient.GetStringAsync(url);

var doc = new HtmlDocument();doc.LoadHtml(html);

// Extraction de tous les titres d'articlesvar articles = doc.DocumentNode.SelectNodes("//article/h2/a");if (articles != null){ foreach (var article in articles) { var title = article.InnerText.Trim(); var link = article.GetAttributeValue("href", ""); Console.WriteLine($"{title} -> {link}"); }}


2. AngleSharp — une alternative moderne



AngleSharp est une bibliothèque plus récente qui offre un support complet de HTML5, CSS3, JavaScript (de manière limitée) et des spécifications DOM. Elle est idéale pour les tâches nécessitant une correspondance précise avec le rendu du navigateur. Elle prend en charge .NET Standard 2.0+, ce qui signifie une compatibilité avec .NET Framework 4.6.1+ et .NET Core.



Installation

dotnet add package AngleSharp


Exemple de base : extraction de tous les liens

using AngleSharp;using AngleSharp.Dom;using AngleSharp.Html.Parser;

var html = @"<html><body> <a href='https://example.com'>Example</a> <a href='https://test.com'>Test</a></body></html>";

var parser = new HtmlParser();IDocument document = parser.ParseDocument(html);

var links = document.QuerySelectorAll("a");foreach (var link in links){ Console.WriteLine($"{link.TextContent} -> {link.GetAttribute("href")}");}// Sortie :// Example -> https://example.com// Test -> https://test.com


Travail avec les attributs

Recommendations