2010-01-21 5 views
16

Je viens de télécharger HTMLAgilityPack et la documentation ne contient aucun exemple.Comment puis-je utiliser HTML Agility Pack pour récupérer toutes les images d'un site Web?

Je suis à la recherche d'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" /> 

J'ai besoin de tirer la source de chaque étiquette 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épondre

32

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 maintenant en fait; J'avais oublié d'écrire document.DocumentNode.

+0

Quel type objet est document dans votre exemple? Je ne peux pas utiliser la méthode .Descendants. S'il vous plaît vérifier ma modification. –

+0

J'ai oublié d'inclure '.DocumentNode'. – SLaks

+0

vérifiez également que vous utilisez la dernière version bêta car la fonctionnalité linq est nouvelle – rtpHarry

7

en fonction de leur 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 sais pas cette extension, donc je ne sais pas comment écrire le tableau à un autre endroit, mais cela à moins vous obtenez vos données. (De plus, je ne définis pas correctement le tableau, j'en suis sûr.)

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


    } 
+0

Faites cela: 'Liste image_links = new Liste (); foreach (lien HtmlNode dans doc.DocumentNode.SelectNodes ("// img")) { image_links.Add (link.GetAttributeValue ("src", "")); } ' – TaW

Questions connexes