Как я могу использовать HTML Agility Pack для извлечения всех изображений с веб-сайта?

c# html-agility-pack parsing

Вопрос

Я просто загрузил HTMLAgilityPack, и в документации нет примеров.

Я ищу способ загрузить все изображения с веб-сайта. Строки адреса, а не физическое изображение.

<img src="blabalbalbal.jpeg" />

Мне нужно потянуть источник каждого тега img. Я просто хочу почувствовать библиотеку и то, что она может предложить. Все говорили, что это лучший инструмент для работы.

редактировать

public void GetAllImages()
    {
        WebClient x = new WebClient();
        string source = x.DownloadString(@"http://www.google.com");

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        document.Load(source);

                         //I can't use the Descendants method. It doesn't appear.
        var ImageURLS = document.desc
                   .Select(e => e.GetAttributeValue("src", null))
                   .Where(s => !String.IsNullOrEmpty(s));        
    }

Принятый ответ

Вы можете сделать это с помощью LINQ, например:

var document = new HtmlWeb().Load(url);
var urls = document.DocumentNode.Descendants("img")
                                .Select(e => e.GetAttributeValue("src", null))
                                .Where(s => !String.IsNullOrEmpty(s));

EDIT : этот код теперь работает; Я забыл написать document.DocumentNode .


Популярные ответы

На основе их одного примера, но с измененным XPath:

 HtmlDocument doc = new HtmlDocument();
 List<string> image_links = new List<string>();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//img"))
 {
    image_links.Add( link.GetAttributeValue("src", "") );
 }

Я не знаю этого расширения, поэтому я не уверен, как записать массив в другое место, но это, по крайней мере, даст вам ваши данные. (Кроме того, я не определяю массив правильно, я уверен. Извините).

редактировать

Используя ваш пример:

public void GetAllImages()
    {
        WebClient x = new WebClient();
        string source = x.DownloadString(@"http://www.google.com");

        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        List<string> image_links = new List<string>();
        document.Load(source);

        foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img"))
        {
          image_links.Add( link.GetAttributeValue("src", "") );
       }


    }


Related

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