Come posso usare l'HTML Agility pacchetto per recuperare tutte le immagini da un sito web?
-
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));
}
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", "") );
}
}