Comment utiliser HTML Agility Pack pour récupérer toutes les images d'un site Web?

c# html-agility-pack parsing

Question

Je viens de télécharger HTMLAgilityPack et la documentation ne contient aucun exemple.

Je cherche un moyen de télécharger toutes les images d'un site Web. Les chaînes d'adresse, pas l'image physique.

<img src="blabalbalbal.jpeg" />

Je dois extraire la source de chaque balise img. Je veux juste avoir une idée de la bibliothèque et de ce qu'elle peut offrir. Tout le monde a dit que c'était le meilleur outil pour le travail.

modifier

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

Réponse acceptée

Vous pouvez le faire en utilisant LINQ, comme ceci:

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

EDIT : Ce code fonctionne actuellement; J'avais oublié d'écrire document.DocumentNode .


Réponse populaire

Basé sur leur seul exemple, mais avec XPath modifié:

 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", "") );
 }

Je ne connais pas cette extension, je ne sais donc pas comment écrire le tableau ailleurs, mais cela vous permettra au moins d'obtenir vos données. (En outre, je ne suis pas sûr de définir le tableau correctement. Désolé).

modifier

En utilisant votre exemple:

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

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow