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 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 HtmlAgilityPack

Ou via .NET CLI :

dotnet add package HtmlAgilityPack


Exemple : 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 AngleSharp


Exemple : 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

Recommendations