Parsing HTML en C# (.NET) : du simple au complexe
Le parsing HTML est l'une des tâches clés lors du développement de web scrapers, 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 efficacement des données de documents HTML, même si le balisage est invalide. Dans cet article, nous examinerons les trois outils les plus populaires : HtmlAgilityPack, AngleSharp et CsQuery, ainsi que des exemples pratiques de leur utilisation.
1. HtmlAgilityPack — le choix classique
HtmlAgilityPack (HAP) est la bibliothèque la plus courante pour le parsing HTML en C#. Elle prend en charge XPath et LINQ, ce qui la rend idéale pour travailler avec des structures hiérarchiques. HAP corrige automatiquement le balisage HTML incorrect, ce qui est particulièrement utile pour analyser des pages "brutes".
Installation via NuGet :
Install-Package HtmlAgilityPackExemple : extraction de tous les liens d'une page
using HtmlAgilityPack;
string url = "https://example.com";var web = new HtmlWeb();var doc = web.Load(url);
var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); string text = link.InnerText.Trim(); Console.WriteLine($"{text}: {href}"); }}Exemple : extraction de données d'un tableau
var tableRows = doc.DocumentNode.SelectNodes("//table[@id='data-table']//tr");foreach (var row in tableRows){ var cells = row.SelectNodes("td"); if (cells != null) { var rowData = cells.Select(c => c.InnerText.Trim()).ToList(); Console.WriteLine(string.Join(" | ", rowData)); }}2. AngleSharp — une alternative moderne
AngleSharp est une bibliothèque plus moderne, entièrement écrite en C# et conforme aux spécifications du W3C. Elle prend en charge les sélecteurs CSS, ce qui la rend pratique pour ceux qui sont habitués à une syntaxe de type jQuery. AngleSharp peut également travailler avec le DOM, SVG et MathML.
Installation via NuGet :
Install-Package AngleSharpExemple : parsing avec des sélecteurs CSS
using AngleSharp;using AngleSharp.Dom;
var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");
// Récupère tous les éléments avec la classe "product"var products = document.QuerySelectorAll(".product");foreach (var product in products){ var name = product.QuerySelector(".product-name")?.TextContent.Trim(); var price = product.QuerySelector(".product-price")?.TextContent.Trim(); Console.WriteLine($"{name}: {price}");}Exemple : extraction de JSON depuis un script
var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){ var json = script.TextContent; // Ensuite, on peut désérialiser le JSON via System.Text.Json Console.WriteLine(json);}3. CsQuery — syntaxe de type jQuery
CsQuery est un port de jQuery pour C#, qui fournit une API familière pour travailler avec le DOM. Il est particulièrement pratique pour ceux qui migrent de JavaScript vers C#. Cependant, il est à noter que le projet est mis à jour moins fréquemment qu'AngleSharp et peut ne pas prendre en charge les dernières versions de .NET.
Installation via NuGet :
Install-Package CsQueryExemple : extraction de texte depuis des éléments
using CsQuery;
string html = "<div class='content'><p>Привет, мир!</p></div>";var dom = CQ.Create(html);
var text = dom[".content