Ich versuche, eine Liste von Bildern von der Website zu bekommen und sie auch auf der Festplatte zu speichern, aber es funktioniert nicht

c# html-agility-pack

Frage

Ich verwende HtmlAgilityPack.

In dieser Funktion ist der imageNodes im foreach count 0

Ich verstehe nicht, warum der Listenzähler 0 ist

Die Website enthält viele Bilder. Was ich will, ist eine Liste der Bilder von der Website zu bekommen und die Liste in der richTextBox1 und ich möchte auch alle Bilder von der Website auf meiner Festplatte speichern.

Wie kann ich es reparieren ?

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

Akzeptierte Antwort

Wie ich die richtige Klasse der Bing-Bilder sehen kann, ist sg_t . Sie können diese HtmlNodes mit der folgenden Linq-Abfrage erhalten:

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

Diese Liste sollte mit allen img mit class = 'sg_t'


Beliebte Antwort

Ein kurzer Blick auf diese Beispielseite / URL in Ihrem Code zeigt, dass die Bilder, nach denen Sie suchen, keinen Klassentyp haben, der mit "img_" beginnt.

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

Ich stelle fest, dass der Code nur auf Thumails ausgerichtet ist. Sie möchten auch die Bild-URL in voller Größe, die sich im Anker um jede Miniatur befindet. Sie müssen die finale URL aus einer href ziehen, die wie folgt aussieht:

<a href="/images/search?q=cat&amp;view=detail&amp;id=89929E55C0136232A79DF760E3859B9952E22F69&amp;first=0&amp;FORM=IDFRIR" class="sg_tc" h="ID=API.images,18.1"><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"></a>

und decodiere das Bit, das wie url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg : url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

welches dekodiert zu: http://actnowtraining.files.wordpress.com/2012/02/cat.jpg



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum