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 HtmlAgilityPackO mediante .NET CLI:
dotnet add package HtmlAgilityPackEjemplo: 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 AngleSharpEjemplo: 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 También en la biblioteca
Passport.js para JavaScript (Node.js): guía completa con ejemplos
Trabajo con fechas en JavaScript (Node.js): mejores bibliotecas
TCPDF para PHP: guía completa con ejemplos prácticos
Trabajo con Excel en TypeScript: bibliotecas, ejemplos y herramientas