Análisis de HTML en C# (.NET): bibliotecas HtmlAgilityPack y AngleSharp

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Análisis de HTML en C# (.NET): descripción general de las bibliotecas HtmlAgilityPack y AngleSharp



El análisis de HTML es una de las tareas clave al desarrollar scrapers web, analizadores de contenido y herramientas de automatización. En el ecosistema de C# (.NET), existen varias bibliotecas maduras que permiten extraer datos de documentos HTML, manipular el árbol DOM y realizar consultas a elementos. En este artículo, analizaremos en detalle las dos bibliotecas más populares: HtmlAgilityPack y AngleSharp, sus capacidades, sintaxis y ejemplos de uso.



1. HtmlAgilityPack: una herramienta probada por el tiempo



HtmlAgilityPack (HAP) es una de las bibliotecas más antiguas y extendidas para el análisis de HTML en .NET. Es compatible tanto con .NET Framework como con .NET Core / .NET 5+. Su principal ventaja es la simplicidad y la tolerancia a fallos al trabajar con HTML "sucio" (marcado no válido, etiquetas no cerradas).



Instalación

// A través del Administrador de paquetes NuGetInstall-Package HtmlAgilityPack

// O a través de .NET CLIdotnet add package HtmlAgilityPack


Ejemplo básico: extracción de encabezados H1

using HtmlAgilityPack;

string html = @"<html><body> <h1>Encabezado 1</h1> <h1>Encabezado 2</h1> <p>Texto del párrafo</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()); }}// Salida:// Encabezado 1// Encabezado 2


Uso de XPath y selectores CSS

HtmlAgilityPack utiliza XPath de forma predeterminada para la navegación. Sin embargo, con el paquete HtmlAgilityPack.CssSelectors se pueden aplicar selectores CSS:

// Instalación: dotnet add package HtmlAgilityPack.CssSelectorsusing HtmlAgilityPack.CssSelectors;

// ... después de cargar el documentovar links = doc.DocumentNode.QuerySelectorAll("a.external-link");foreach (var link in links){ Console.WriteLine(link.GetAttributeValue("href", ""));}


Análisis de un sitio web real

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);

// Extraemos todos los encabezados de artículosvar 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: una alternativa moderna



AngleSharp es una biblioteca más reciente que ofrece soporte completo para HTML5, CSS3, JavaScript (de forma limitada) y las especificaciones del DOM. Es ideal para tareas que requieren una correspondencia precisa con el renderizado del navegador. Es compatible con .NET Standard 2.0+, lo que significa compatibilidad con .NET Framework 4.6.1+ y .NET Core.



Instalación

dotnet add package AngleSharp


Ejemplo básico: extracción de todos los enlaces

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")}");}// Salida:// Example -> https://example.com// Test -> https://test.com


Trabajo con atributos

Recommendations