Come posso usare l'HTML Agility pacchetto per recuperare tutte le immagini da un sito web?

StackOverflow https://stackoverflow.com/questions/2113924

  •  22-09-2019
  •  | 
  •  

Domanda

Ho appena scaricato il HtmlAgilityPack e la documentazione non ha alcun esempio.

Sto cercando un modo per scaricare tutte le immagini da un sito web. Le stringhe di indirizzo, non l'immagine fisica.

<img src="blabalbalbal.jpeg" />

Ho bisogno di staccare la fonte di ogni tag img. Voglio solo per ottenere un tatto per la biblioteca e che cosa può offrire. Ognuno ha detto che questo è stato il miglior strumento per il lavoro.

Modifica

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));        
    }
È stato utile?

Soluzione

È possibile farlo utilizzando LINQ, in questo modo:

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

Modifica : Questo codice ora effettivamente funziona; Mi ero dimenticato di scrivere document.DocumentNode.

Altri suggerimenti

In base alla loro un esempio, ma con XPath modificato:

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

Non so questa estensione, quindi non sono sicuro di come scrivere fuori la matrice da qualche altra parte, ma che almeno si ottenere i vostri dati. (Inoltre, non mi definisco l'array correttamente, ne sono sicuro. Siamo spiacenti).

Modifica

Usando il tuo esempio:

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


    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top