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

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

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

<img src="blabalbalbal.jpeg" />

Necesito para tirar de la fuente de cada una etiqueta img. Solo quiero tener una idea de la biblioteca y lo que puede ofrecer. Todo el mundo dijo 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));        
    }
InformationsquelleAutor Sergio Tapia | 2010-01-21

2 Kommentare

  1. 38

    Usted puede hacer esto utilizando LINQ, como este:

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

    EDITAR: Este código ahora realmente funciona; me había olvidado de escribir document.DocumentNode.

    • ¿Qué tipo de objeto es el documento en tu ejemplo? No puedo usar el .Descendientes método. Por favor revise mi edición.
    • Se me olvidó incluir .DocumentNode.
    • también compruebe que está utilizando la última beta, así como la funcionalidad de linq es nuevo
  2. 9

    Basado en su ejemplo, pero con la modificación de XPath:

     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 a esta extensión, así que no estoy seguro de cómo escribir la matriz a otra parte, pero que por lo menos conseguir sus datos. (Además, yo no definir la matriz correctamente, estoy seguro. Lo sentimos).

    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", "") );
           }
    
    
        }
    • Hacer que: List<string> image_links = new List<string>(); foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//img")) { image_links.Add( link.GetAttributeValue("src", "") ); }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea