Extracción de imágenes web en C# utilizando AngleSharp

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

Etiquetas: C# AngleSharp Web Scraping HTML parsing .NET

Publicado el 9-23 07:10