Come ottenere img / src o a / hrefs usando Html Agility Pack?

.net c# html html-agility-pack html-parsing

Domanda

Voglio usare il pacchetto agility HTML per analizzare i link immagine e href da una pagina HTML, ma non so molto di XML o XPath. Anche se ho cercato documenti di aiuto in molti siti web, non riesco a risolvere il problema problema.Inoltre, io uso C # in VisualStudio 2005. E non riesco a parlare inglese correntemente, quindi, darò i miei sinceri ringraziamenti a chi può scrivere alcuni codici utili.

Risposta accettata

Il primo esempio sulla home page fa qualcosa di molto simile, ma considera:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

Quindi puoi immaginare che per img @ src, basta sostituire ogni a con img e href con src . Potresti anche essere in grado di semplificare a:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

Per la gestione dell'URL relativo, guarda la classe Uri .


Risposta popolare

L'esempio e la risposta accettata sono errati. Non viene compilato con l'ultima versione. Provo qualcos'altro:

    private List<string> ParseLinks(string html)
    {
        var doc = new HtmlDocument(); 
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
        return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
               r => r.Attributes.ToList().ConvertAll(
               i => i.Value)).SelectMany(j => j).ToList();
    }

Questo funziona per me.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché