LINQを使用してHtmlAgilityPackでHTMLページを解析する

c# html-agility-pack linq

質問

どのように私はWebページ上でLinqを使用してHTMLを解析し、文字列に値を追加することができます。私はメトロアプリケーションでHtmlAgilityPackを使用しており、3つの値を戻して文字列に追加したいと考えています。

ここにurl = http://explorer.litecoin.net/address/Li7x5UZqWUy7o1tEC2x5o6cNsn2bmDxA2Nがあります

私は以下の値を取得したいと思います。 "belwo"

「残高:」、「トランザクション数」、「受信済」

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

受け入れられた回答

以下を試してください。また、 'p'タグのフリーテキストよりも少し良い形になっているので、テーブルを引き離すことを検討することもできます。

乾杯、アーロン。

// 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()'は、変数をコンソールにダンプするLinqPadコマンドです。以下は、Dumpコマンドの出力例です。

  • 残高:5 LTC
  • での取引:2
  • 受け取った:5 LTC
  • トランザクションアウト:0
  • 送信:0 LTC

人気のある回答

あなたが解析しなければならない文書は、多くの要素がクラスまたは少なくともid属性を欠いているが、構文解析のために最もうまく構成されていないが、取得したいのは2番目のpタグの内容である

あなたはこれを試すことができます

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];



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ