2010-01-21 26 views
16

Acabo de descargar HTMLAgilityPack y la documentación no tiene ningún ejemplo.¿Cómo puedo usar HTML Agility Pack para recuperar todas las imágenes de un sitio web?

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

<img src="blabalbalbal.jpeg" /> 

Necesito extraer la fuente de cada etiqueta img. Solo quiero conocer 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

32

Usted puede hacer esto utilizando 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)); 

EDITAR: Este código funciona ahora en realidad; Me olvidé de escribir document.DocumentNode.

+0

Qué tipo de objeto es el documento en su ejemplo? No puedo usar el método .Descendientes. Por favor revisa mi edición. –

+0

Olvidé incluir '.DocumentNode'. – SLaks

+0

también compruebe que está utilizando la versión beta más reciente, ya que la funcionalidad de linq es nueva – rtpHarry

7

en base a su un ejemplo, pero con XPath modificación:

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 sé esta extensión, así que no estoy seguro de cómo escribir la matriz a otra parte, pero que por lo al menos obtener tus datos. (Además, no defino la matriz correctamente, estoy seguro. Lo siento).

Editar

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


    } 
+0

Haga eso: 'List image_links = new List (); foreach (enlace HtmlNode en doc.DocumentNode.SelectNodes ("// img")) { image_links.Add (link.GetAttributeValue ("src", "")); } ' – TaW

Cuestiones relacionadas