Análisis de HTML en C# (.NET): revisión de bibliotecas y ejemplos de código

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): de lo simple a lo complejo



El análisis de HTML es una de las tareas clave en el desarrollo de web scrapers, 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 de manera eficiente, incluso si el marcado no es válido. En este artículo, revisaremos las tres herramientas más populares: HtmlAgilityPack, AngleSharp y CsQuery, y analizaremos ejemplos prácticos de su uso.



1. HtmlAgilityPack — la elección clásica



HtmlAgilityPack (HAP) es la biblioteca más común para el análisis de HTML en C#. Soporta XPath y LINQ, lo que la hace ideal para trabajar con estructuras jerárquicas. HAP corrige automáticamente el marcado HTML incorrecto, lo que es especialmente útil al analizar páginas "en bruto".



Instalación a través de NuGet:

Install-Package HtmlAgilityPack


Ejemplo: extraer todos los enlaces de una página

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


Ejemplo: extraer datos de una tabla

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 — la alternativa moderna



AngleSharp es una biblioteca más moderna, completamente escrita en C# y que cumple con las especificaciones de W3C. Soporta selectores CSS, lo que la hace conveniente para quienes están acostumbrados a la sintaxis similar a jQuery. AngleSharp también puede trabajar con DOM, SVG y MathML.



Instalación a través de NuGet:

Install-Package AngleSharp


Ejemplo: análisis usando selectores CSS

using AngleSharp;using AngleSharp.Dom;

var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");

// Obtenemos todos los elementos con la clase "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}");}


Ejemplo: extraer JSON de un script

var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){    var json = script.TextContent;    // Luego se puede deserializar el JSON usando System.Text.Json    Console.WriteLine(json);}


3. CsQuery — sintaxis similar a jQuery



CsQuery es un puerto de jQuery para C# que proporciona una API familiar para trabajar con el DOM. Es especialmente útil para quienes migran de JavaScript a C#. Sin embargo, cabe destacar que el proyecto se actualiza con menos frecuencia que AngleSharp y puede no ser compatible con las últimas versiones de .NET.



Instalación a través de NuGet:

Install-Package CsQuery


Ejemplo: extraer texto de elementos

using CsQuery;

string html = "<div class='content'><p>¡Hola, mundo!</p></div>";var dom = CQ.Create(html);

var text = dom[".content

Recommendations