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 ou de tests automatisés. Dans l'écosystème .NET, il existe plusieurs bibliothèques puissantes qui permettent d'extraire des données de documents HTML, de manipuler l'arbre DOM et d'effectuer des requêtes complexes. Dans cet article, nous examinerons les deux bibliothèques les plus populaires : HtmlAgilityPack et AngleSharp. Vous découvrirez leurs caractéristiques, leurs avantages et obtiendrez des exemples de code prêts à l'emploi en C#.
HtmlAgilityPack : l'approche classique
HtmlAgilityPack (HAP) est la bibliothèque la plus ancienne et la plus répandue pour le parsing HTML en .NET. Elle offre une API intuitive pour naviguer dans l'arbre DOM, prend en charge XPath et les requêtes LINQ. Principales fonctionnalités :
- Chargement de HTML depuis une chaîne, un fichier ou une URL.
- Prise en charge de XPath 1.0 pour une recherche précise des éléments.
- Travail avec les attributs, le texte et les nœuds imbriqués.
- Correction automatique du HTML invalide (par exemple, balises non fermées).
Installation
Installez la bibliothèque via NuGet :
Install-Package HtmlAgilityPackOu via .NET CLI :
dotnet add package HtmlAgilityPackExemple : extraction de titres d'actualités
Supposons que nous devions extraire les titres d'un site d'actualités. Voici comment faire avec HAP et XPath :
using HtmlAgilityPack;using System;using System.Linq;
class Program{ static void Main() { // Chargement du document HTML var web = new HtmlWeb(); var doc = web.Load("https://example-news.com"); // Sélection de tous les titres h2 avec la classe "news-title" var titles = doc.DocumentNode .SelectNodes("//h2[@class='news-title']"); if (titles != null) { foreach (var title in titles) { Console.WriteLine(title.InnerText.Trim()); } } }}Dans cet exemple, nous utilisons l'expression XPath //h2[@class='news-title'] pour trouver tous les éléments <h2> avec la classe spécifiée. La méthode SelectNodes retourne une collection de nœuds, et InnerText extrait le texte sans les balises HTML.
Travail avec les attributs
Il est souvent nécessaire d'obtenir la valeur d'un attribut, par exemple, les liens des balises <a> :
var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); Console.WriteLine(href); }}AngleSharp : un parseur moderne avec sélecteurs CSS
AngleSharp est une bibliothèque plus moderne qui prend en charge non seulement XPath, mais aussi les sélecteurs CSS, ce qui la rend pratique pour les développeurs familiers avec les technologies web. Elle est également entièrement conforme aux normes W3C et peut fonctionner avec du contenu dynamique.
- Prise en charge des sélecteurs CSS (comme dans jQuery).
- Travail avec HTML, XML, SVG et MathML.
- Possibilité d'exécuter JavaScript (via des extensions).
- Chargement asynchrone des documents.
Installation
dotnet add package AngleSharpExemple : extraction de données avec des sélecteurs CSS
Reprenons l'exemple précédent, mais cette fois avec AngleSharp et les sélecteurs CSS :
using AngleSharp;using AngleSharp.Html.Parser;using System;using System.Linq;using System.Threading.Tasks;
class Program{ static async Task Main() { // Création du parseur var parser = new HtmlParser(); // Chargement du HTML (depuis une chaîne ou une URL) var document = await parser.ParseDocumentAsync( a Aussi dans la bibliothèque
Envoi d'email en TypeScript : bibliothèques et exemples de code
Géolocalisation et cartes en JavaScript (Node.js) : bibliothèques et outils
Génération de rapports PDF en JavaScript (Node.js) : Aperçu des bibliothèques et exemples de code
Internationalisation (i18n) en TypeScript : guide complet
Métriques Prometheus en Kotlin : intégration avec Micrometer et Ktor