J'essaie d'obtenir une liste d'images du site Web et de les enregistrer également sur le disque dur, mais cela ne fonctionne pas.

c# html-agility-pack

Question

J'utilise HtmlAgilityPack.

Dans cette fonction, le nombre imageNodes du nombre foreach est 0.

Je ne comprends pas pourquoi le nombre de listes est 0

Le site contient de nombreuses images. Ce que je veux, c'est obtenir une liste des images du site et l'afficher dans le richTextBox1 . Je souhaite également enregistrer toutes les images du site sur mon disque dur.

Comment puis-je le réparer?

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

Réponse acceptée

Comme je peux le voir, la classe correcte des images Bing est sg_t . Vous pouvez obtenir ces HtmlNodes avec la requête Linq suivante:

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

Cette liste doit être remplie avec tous les img avec class = 'sg_t'


Réponse populaire

Un rapide coup d'œil à cet exemple de page / URL dans votre code montre que les images recherchées ne possèdent pas de type de classe commençant par "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">

Je remarque que votre code cible uniquement les colonnes. Vous souhaitez également obtenir l'URL de l'image en taille réelle, qui se trouve dans l'ancre entourant chaque vignette. Vous devrez extraire l'URL finale d'un href ressemblant à ceci:

<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">

et décodez le bit qui ressemble à: url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

qui décode à: http://actnowtraining.files.wordpress.com/2012/02/cat.jpg




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi