Я пытаюсь получить список изображений с веб-сайта, а также сохранить их на жесткий диск, но он не работает

c# html-agility-pack

Вопрос

Я использую HtmlAgilityPack.

В этой функции imageNodes в подсчете foreach составляет 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 . Вы можете получить эти HtmlNodes со следующим запросом Linq:

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

Этот список должен быть заполнен всем img 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-адрес полного размера, который находится в привязке к каждому миниатюре. Вам нужно будет вывести конечный URL-адрес из href, который выглядит так:

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

и декодировать бит, который выглядит так: url=http%3a%2f%2factnowtraining.files.wordpress.com%2f2012%2f02%2fcat.jpg

который расшифровывается: http://actnowtraining.files.wordpress.com/2012/02/cat.jpg



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему