Анализ HTML-страницы с помощью HtmlAgilityPack с использованием LINQ

c# html-agility-pack linq

Вопрос

Как я могу разобрать html с помощью Linq на веб-странице и добавить значения в строку. Я использую HtmlAgilityPack в приложении metro и хотел бы вернуть 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

Популярные ответы

документ, который вы должны проанализировать, не наиболее хорошо сформирован для синтаксического анализа, во многих элементах отсутствует атрибут класса или по меньшей мере, но то, что вы хотите получить, - это второе содержимое тега 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];


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow