Comment obtenir img / src ou a / hrefs en utilisant Html Agility Pack?

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

Question

Je souhaite utiliser le pack d'agilité HTML pour analyser des liens image et href à partir d'une page HTML, mais je ne connais pas grand-chose de XML ou de XPath. problem.In, j'utilise C # dans VisualStudio 2005. Et je ne parle pas anglais couramment, je vais donc remercier sincèrement celui qui écrit des codes utiles.

Réponse acceptée

Le premier exemple sur la page d'accueil a quelque chose de très similaire, mais considérons:

 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
 }

Vous pouvez donc imaginer que pour img @ src, il suffit de remplacer chacun a par img et href par src . Vous pourriez même être en mesure de simplifier pour:

 foreach(HtmlNode node in doc.DocumentElement
              .SelectNodes("//a/@href | //img/@src")
 {
    list.Add(node.Value);
 }

Pour la gestion relative des URL, regardez la classe Uri .


Réponse populaire

L'exemple et la réponse acceptée sont faux. Il ne compile pas avec la dernière version. J'essaie autre chose:

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

Cela fonctionne pour moi.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow