¿Cómo puedo usar HTML Agility Pack para recuperar todas las imágenes de un sitio web?

c# html-agility-pack parsing

Pregunta

Acabo de descargar el HTMLAgilityPack y la documentación no tiene ningún ejemplo.

Estoy buscando una manera de descargar todas las imágenes de un sitio web. Las cadenas de dirección, no la imagen física.

<img src="blabalbalbal.jpeg" />

Necesito sacar la fuente de cada etiqueta img. Solo quiero tener una idea de la biblioteca y lo que puede ofrecer. Todos dijeron que esta era la mejor herramienta para el trabajo.

Editar

public void GetAllImages()
    {
        WebClient x = new WebClient();
        string source = x.DownloadString(@"http://www.google.com");

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        document.Load(source);

                         //I can't use the Descendants method. It doesn't appear.
        var ImageURLS = document.desc
                   .Select(e => e.GetAttributeValue("src", null))
                   .Where(s => !String.IsNullOrEmpty(s));        
    }

Respuesta aceptada

Puedes hacerlo usando LINQ, así:

var document = new HtmlWeb().Load(url);
var urls = document.DocumentNode.Descendants("img")
                                .Select(e => e.GetAttributeValue("src", null))
                                .Where(s => !String.IsNullOrEmpty(s));

EDIT : este código ahora realmente funciona; Me había olvidado de escribir document.DocumentNode .


Respuesta popular

Basado en su ejemplo, pero con XPath modificado:

 HtmlDocument doc = new HtmlDocument();
 List<string> image_links = new List<string>();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//img"))
 {
    image_links.Add( link.GetAttributeValue("src", "") );
 }

No conozco esta extensión, así que no estoy seguro de cómo escribir la matriz en otro lugar, pero al menos eso le proporcionará sus datos. (Además, no defino la matriz correctamente, estoy seguro. Lo siento).

Editar

Usando tu ejemplo:

public void GetAllImages()
    {
        WebClient x = new WebClient();
        string source = x.DownloadString(@"http://www.google.com");

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        List<string> image_links = new List<string>();
        document.Load(source);

        foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img"))
        {
          image_links.Add( link.GetAttributeValue("src", "") );
       }


    }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué