AngleSharp es una biblioteca para .NET diseñada para evaluar y manipular código HTML de manera eficiente. Transforma el marcado en una estructura de árbol DOM gestionable, ofreciendo métodos de extensión similares a los de jQuery para facilitar la interacción con los nodos. Sus principales ventajas incluyen el soporte para selectores CSS, consultas LINQ, manipulación dinámica del DOM y la capacidad de ejecutar JavaScript.
Instalación mediante NuGet
Para integrar esta herramienta en tu proyecto, puedes utilizar el administrador de paqutees de NuGet. Ejecuta el siguiente comando en la consola:
Install-Package AngleSharp
Manipulación básica del DOM
A continuación, se muestra cómo instanciar el analizador, inyectar un nuevo elemento en el cuerpo del documento y recuperar el HTML resultante:
var analizador = new HtmlParser();
string marcadoOriginal = "<h1>Título de prueba</h1><p>Párrafo inicial</p>";
var dom = analizador.ParseDocument(marcadoOriginal);
var parrafoAdicional = dom.CreateElement("p");
parrafoAdicional.TextContent = "Contenido del nuevo párrafo inyectado.";
dom.Body.AppendChild(parrafoAdicional);
string htmlFinal = dom.DocumentElement.OuterHtml;
Modificación de atributos en lote
Es posible alterar las propiedades de múltiples etiquetas de forma simultánea. El siguiente ejemplo asigna un atributo personalizado a cada elemento encontrado mediante un selector:
var procesador = new HtmlParser();
var docDom = procesador.ParseDocument("<div class=\"contenedor\"><span>Uno</span><span>Dos</span></div>");
// Asigna el atributo 'data-estado' a todos los elementos span
var nodosModificados = docDom.QuerySelectorAll("span").Attr("data-estado", "activo");
string domResultante = docDom.DocumentElement.OuterHtml;
Scraping de imágenes desde una galería web
Para descargar y clasificar imágenes, primero definimos un modelo de datos para almacenar la información extraída del sitio web:
public class MediaExtraido
{
public string Nombre { get; set; }
public string RutaImagen { get; set; }
}
Luego, configuramos el motor de carga asíncrona, procesamos la URL de destino y extraemos los atributos relevantes de las etiquetas de imagen utilizando LINQ y selectores CSS:
var configuracion = Configuration.Default.WithDefaultLoader();
string urlDestino = "https://www.ejemplo-galeria.com/fotos";
var contexto = BrowsingContext.New(configuracion);
var documento = await contexto.OpenAsync(urlDestino);
var contenedores = documento.QuerySelectorAll(".galeria .item");
var resultados = new List<MediaExtraido>();
foreach (var nodo in contenedores)
{
var imgElement = nodo.QuerySelector("img");
if (imgElement != null)
{
resultados.Add(new MediaExtraido
{
Nombre = imgElement.GetAttribute("alt"),
RutaImagen = imgElement.GetAttribute("src")
});
}
}