2010-01-21 8 views
16

Właśnie pobrałem HTMLAgilityPack i dokumentacja nie ma żadnych przykładów.Jak mogę użyć pakietu HTML Agility Pack do pobrania wszystkich obrazów ze strony internetowej?

Szukam sposobu na pobranie wszystkich obrazów ze strony internetowej. Ciągi adresu, a nie obraz fizyczny.

<img src="blabalbalbal.jpeg" /> 

Potrzebuję pobrać źródło każdego tagu img. Chcę tylko poznać bibliotekę i jej ofertę. Wszyscy mówili, że to najlepsze narzędzie do tej pracy.

Edit

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

Odpowiedz

32

Można to zrobić przy użyciu LINQ, tak:

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

EDIT: Ten kod teraz faktycznie działa; Zapomniałem napisać document.DocumentNode.

+0

Jaki typ obiektu jest dokument w swoim przykładzie? Nie mogę użyć metody .Descendants. Sprawdź moją edycję. –

+0

Zapomniałem dodać '.DocumentNode'. – SLaks

+0

sprawdź także, czy korzystasz z najnowszej wersji beta, ponieważ funkcjonalność linq jest nowa – rtpHarry

7

Na podstawie ich jeden przykład, ale ze zmodyfikowanym 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", "")); 
} 

Nie wiem, to rozszerzenie, więc nie jestem pewien, jak wypisać tablicę gdzieś indziej, ale to będzie co najmniej dostać twoje dane. (Nie jestem też pewien, czy poprawnie zdefiniowałem tablicę, przepraszam).

Edit

Korzystanie przykład:

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

Należy to zrobić: 'List image_links = new List (); foreach (link HtmlNode w doc.DocumentNode.SelectNodes ("// img")) { image_links.Add (link.GetAttributeValue ("src", "")); } ' – TaW

Powiązane problemy