LINQ를 사용하여 HTML 페이지를 HtmlAgilityPack으로 파싱하기

c# html-agility-pack linq

문제

어떻게 HTML을 웹 페이지에서 Linq을 사용하여 파싱하고 문자열에 값을 추가 할 수 있습니까? 메트로 응용 프로그램에서 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 속성이 누락되어 있습니다.하지만 원하는 것은 두 번째 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는 합법적입니까? 예, 이유를 알아보십시오.