찾다

 >  Q&A  >  본문

C#으로 작성된 Html Agility Pack을 사용하여 비트코인 ​​가격 다운로드

<p>Html Agility Pack을 사용하여 https://coinmarketcap.com/currency/bitcoin/에서 비트코인 ​​가격을 가져와야 합니다. 저는 이 예를 사용하고 있는데 잘 작동합니다. </p> <pre class="brush:php;toolbar:false;">var html = @"http://html-agility-pack.net/" HtmlWeb 웹 = 새로운 HtmlWeb(); var htmlDoc = web.Load(html); var node = htmlDoc.DocumentNode.SelectSingleNode("//head/title"); Console.WriteLine("노드 이름: " + node.Name + "n" + node.OuterHtml);</pre> <p>XPath는 다음과 같습니다: <code>//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[2]/div/ div[2]/div[1]/div</code></p> <p>HTML 코드: </p> <pre class="brush:php;toolbar:false;"><div class="priceValue "><span>$17,162.42</span></div></pre> <p>다음 코드를 시도했지만 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."를 반환합니다. </p> <pre class="brush:php;toolbar:false;">var html = @"https://coinmarketcap.com/currency/bitcoin/" HtmlWeb 웹 = 새로운 HtmlWeb(); var htmlDoc = web.Load(html); var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='priceValue']/span"); Console.WriteLine("노드 이름: " + node.Name + "n" + node.InnerText);`</pre></p>
P粉156532706P粉156532706474일 전723

모든 응답(1)나는 대답할 것이다

  • P粉729518806

    P粉7295188062023-09-06 09:17:49

    TLDR:

    1. 응답의 압축을 풀도록 HtmlWeb 지시해야 합니다(또는 적합한 HTTP 클라이언트를 사용하십시오)
    2. XPath 선택기를 수정해야 합니다

    분명히 SelectSingleNode()调用返回null노드를 찾을 수 없기 때문입니다.

    이 경우 로드된 HTML을 검사하는 것이 도움이 됩니다. htmlDoc.DocumentNode.InnerHtml 값을 가져오면 이를 수행할 수 있습니다. 나는 이것을 시도했지만 생성된 "HTML"은 의미가 없습니다.

    이유는 HtmlWeb기본적으로 수신된 응답의 압축을 풀지 않기 때문입니다. 자세한 내용은 thisgithub 문제를 참조하세요. 적절한 HTTP 클라이언트(예: this one)를 사용했거나 HtmlAgilityPack 개발자가 보다 적극적이었다면 이 문제가 발생하지 않을 것이라고 생각합니다.

    HtmlWeb를 계속 사용하려는 경우 코드는 다음과 같아야 합니다.

    으아악

    찾고 있는 요소의 클래스는 실제로 priceValue (末尾有一个空格字符),页面中还有另一个类为priceValuediv라는 점에 유의하세요. 하지만 이는 또 다른 질문이며 결국에는 보다 강력한 선택기를 찾을 수 있을 것입니다. 아마도 이것을 시도해 보세요:

    으아악

    회신하다
    0
  • 취소회신하다