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): Resumen de las bibliotecas HtmlAgilityPack y AngleSharp



El análisis de HTML es una de las tareas clave al desarrollar web scrapers, analizadores de contenido o pruebas automatizadas. En el ecosistema .NET existen varias bibliotecas potentes que permiten extraer datos de documentos HTML, manipular el árbol DOM y realizar consultas complejas. En este artículo analizaremos las dos bibliotecas más populares: HtmlAgilityPack y AngleSharp. Conocerá sus características, ventajas y obtendrá ejemplos de código listos para usar en C#.



HtmlAgilityPack: el enfoque clásico



HtmlAgilityPack (HAP) es la biblioteca más antigua y extendida para el análisis de HTML en .NET. Proporciona una API intuitiva para navegar por el árbol DOM, admite XPath y consultas LINQ. Las principales capacidades son:



  • Carga de HTML desde una cadena, archivo o URL.
  • Soporte para XPath 1.0 para una búsqueda precisa de elementos.
  • Trabajo con atributos, texto y nodos anidados.
  • Corrección automática de HTML incorrecto (por ejemplo, etiquetas no cerradas).


Instalación

Instale la biblioteca a través de NuGet:

Install-Package HtmlAgilityPack

O mediante .NET CLI:

dotnet add package HtmlAgilityPack


Ejemplo: extracción de titulares de noticias

Supongamos que necesitamos extraer los titulares de un sitio de noticias. Así es como se hace con HAP y XPath:



using HtmlAgilityPack;using System;using System.Linq;

class Program{ static void Main() { // Cargamos el documento HTML var web = new HtmlWeb(); var doc = web.Load("https://example-news.com"); // Seleccionamos todos los encabezados h2 con la clase "news-title" var titles = doc.DocumentNode .SelectNodes("//h2[@class='news-title']"); if (titles != null) { foreach (var title in titles) { Console.WriteLine(title.InnerText.Trim()); } } }}


En este ejemplo usamos la expresión XPath //h2[@class='news-title'] para encontrar todos los elementos <h2> con la clase especificada. El método SelectNodes devuelve una colección de nodos, y InnerText extrae el texto sin etiquetas HTML.



Trabajo con atributos

A menudo es necesario obtener el valor de un atributo, por ejemplo, los enlaces de las etiquetas <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 analizador moderno con selectores CSS



AngleSharp es una biblioteca más moderna que admite no solo XPath, sino también selectores CSS, lo que la hace conveniente para desarrolladores familiarizados con tecnologías web. También cumple completamente con los estándares W3C y puede trabajar con contenido dinámico.



  • Soporte para selectores CSS (como en jQuery).
  • Trabajo con HTML, XML, SVG y MathML.
  • Posibilidad de ejecutar JavaScript (a través de extensiones).
  • Carga asíncrona de documentos.


Instalación

dotnet add package AngleSharp


Ejemplo: extracción de datos con selectores CSS

Repitamos el ejemplo anterior, pero ahora con AngleSharp y selectores CSS:



using AngleSharp;using AngleSharp.Html.Parser;using System;using System.Linq;using System.Threading.Tasks;

class Program{ static async Task Main() { // Creamos el analizador var parser = new HtmlParser(); // Cargamos el HTML (puede ser desde una cadena o URL) var document = await parser.ParseDocumentAsync( a

Recommendations