Analyse de page HTML avec HtmlAgilityPack à l'aide de LINQ

c# html-agility-pack linq

Question

Comment puis-je analyser html en utilisant Linq sur une page Web et ajouter des valeurs à une chaîne. J'utilise HtmlAgilityPack sur une application de métro et aimerais ramener 3 valeurs et les ajouter à une chaîne.

voici l'url = http://explorer.litecoin.net/address/Li7x5UZqWUy7o1tEC2x5o6cNsn2bmDxA2N

Je voudrais obtenir les valeurs de ce qui suit voir "belwo"

"Solde:", "Transactions dans", "Reçu"

WebResponse x = await req.GetResponseAsync();
HttpWebResponse res = (HttpWebResponse)x;
if (res != null)
{
    if (res.StatusCode == HttpStatusCode.OK)
    {
        Stream stream = res.GetResponseStream();
        using (StreamReader reader = new StreamReader(stream))
        {
            html = reader.ReadToEnd();
        }
        HtmlDocument htmlDocument = new HtmlDocument();
        htmlDocument.LoadHtml(html);

        string appName = htmlDocument.DocumentNode.Descendants // not sure what t
        string a = "Name: " + WebUtility.HtmlDecode(appName);
    }
}

Réponse acceptée

S'il vous plaît essayez ce qui suit. Vous pouvez également envisager de séparer la table car elle est un peu mieux formée que le texte libre de la balise 'p'.

Cordialement, Aaron.

// download the site content and create a new html document
// NOTE: make this asynchronous etc when considering IO performance
var url = "http://explorer.litecoin.net/address/Li7x5UZqWUy7o1tEC2x5o6cNsn2bmDxA2N";
var data = new WebClient().DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(data);

// extract the transactions 'h3' title, the node we want is directly before it
var transTitle = 
    (from h3 in doc.DocumentNode.Descendants("h3")
     where h3.InnerText.ToLower() == "transactions"
     select h3).FirstOrDefault();

// tokenise the summary, one line per 'br' element, split each line by the ':' symbol
var summary = transTitle.PreviousSibling.PreviousSibling;
var tokens = 
    (from row in summary.InnerHtml.Replace("<br>", "|").Split('|')
     where !string.IsNullOrEmpty(row.Trim())
     let line = row.Trim().Split(':')
     where line.Length == 2
     select new { name = line[0].Trim(), value = line[1].Trim() });

// using linqpad to debug, the dump command drops the currect variable to the output
tokens.Dump();

'Dump ()', est une commande LinqPad qui dumpe la variable sur la console. Voici un exemple du résultat de la commande Dump:

  • Solde: 5 LTC
  • Transactions dans: 2
  • Reçu: 5 LTC
  • Transactions sur: 0
  • Envoyé: 0 LTC

Réponse populaire

le document que vous devez analyser n'est pas le mieux formé pour analyser de nombreux éléments dont l'attribut class ou au moins id manque

tu peux essayer ça

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html);



var pNodes = htmlDocument.DocumentNode.SelectNodes("//p")
[1].InnerHtml.ToString().Split(new string[] { "<br />" }, StringSplitOptions.None).Take(3);

 string vl="Balance:"+pNodes[0].Split(':')[1]+"Transactions in"+pNodes[1].Split(':')[1]+"Received"+pNodes[2].Split(':')[1];



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi