我正在嘗試從網站獲取圖像列表,並將它們保存到硬盤但它不起作用

c# html-agility-pack

我正在使用HtmlAgilityPack。

在此函數中,foreach計數中的imageNodes為0

我不明白為什麼列表計數為0

該網站包含許多圖像。我想要的是從站點獲取圖像列表並在richTextBox1顯示列表,我還想將我站點上的所有圖像保存在我的硬盤上。

我該如何解決?

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

一般承認的答案

正如我所看到的Bing圖像的正確類別是sg_t 。您可以使用以下Linq查詢獲取這些HtmlNodes

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

這個列表應該填充所有img with class = 'sg_t'


熱門答案

快速查看代碼中的示例頁面/ URL,可以看出您之後的圖像沒有以“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">

我注意到你的代碼只針對thumnails。您還需要全尺寸圖像URL,它位於每個縮略圖周圍的錨點中。您需要從href中提取最終URL,如下所示:

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

並解碼看起來像這樣的位: url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

解析為: http://actnowtraining.files.wordpress.com/2012/02/cat.jpghttp://actnowtraining.files.wordpress.com/2012/02/cat.jpg




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因