Estoy intentando obtener una lista de imágenes del sitio web y también guardarlas en el disco duro pero no funciona

c# html-agility-pack

Pregunta

Estoy usando HtmlAgilityPack.

En esta función, los imageNodes en el recuento de foreach es 0

No entiendo por qué el recuento de la lista es 0

El sitio web contiene muchas imágenes. Lo que quiero es obtener una lista de las imágenes del sitio y mostrar la lista en richTextBox1 y también quiero guardar todas las imágenes del sitio en mi disco duro.

Cómo puedo arreglarlo ?

public void GetAllImages()
{
   // Bing Image Result for Cat, First Page
   string url = "http://www.bing.com/images/search?q=cat&go=&form=QB&qs=n";

   // For speed of dev, I use a WebClient
   WebClient client = new WebClient();
   string html = client.DownloadString(url);

   // Load the Html into the agility pack
   HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
   doc.LoadHtml(html);

   // Now, using LINQ to get all Images
   List<HtmlNode> imageNodes = null;
   imageNodes = (from HtmlNode node in doc.DocumentNode.SelectNodes("//img")
                 where node.Name == "img"
                    && node.Attributes["class"] != null
                    && node.Attributes["class"].Value.StartsWith("img_")
                 select node).ToList();

   foreach (HtmlNode node in imageNodes)
   {
      // Console.WriteLine(node.Attributes["src"].Value);
      richTextBox1.Text += node.Attributes["src"].Value + Environment.NewLine;
   }
}

Respuesta aceptada

Como puedo ver, la clase correcta de las imágenes de Bing es sg_t . Puede obtener esos HtmlNodes con la siguiente consulta de Linq:

List<HtmlNode> imageNodes = doc.DocumentNode.Descendants("img")
    .Where(n=> n.Attributes["class"] != null && n.Attributes["class"].Value == "sg_t")
    .ToList();

Esta lista se debe llenar con todos los img con class = 'sg_t'


Respuesta popular

Una mirada rápida a esa página / URL de ejemplo en su código muestra que las imágenes que está buscando no tienen un tipo de clase que comience con "img_".

<img class="sg_t" src="http://ts2.mm.bing.net/images/thumbnail.aspx?q=4588327016989297&amp;id=db87e23954c9a0360784c0546cd1919c&amp;url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg" style="height:133px;top:2px">

Me doy cuenta de que su código está dirigido sólo a las columnas. También desea la URL de imagen de tamaño completo, que se encuentra en el ancla que rodea a cada miniatura. Deberá extraer la URL final de un href que se parece a esto:

<img class="sg_t" src="http://ts2.mm.bing.net/images/thumbnail.aspx?q=4588327016989297&amp;id=db87e23954c9a0360784c0546cd1919c&amp;url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg" style="height:133px;top:2px">

y decodifique el bit que parece: url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

que decodifica a: http://actnowtraining.files.wordpress.com/2012/02/cat.jpg




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é