C#으로 작성된 Html Agility Pack을 사용하여 비트코인 ​​가격 다운로드
P粉156532706
P粉156532706 2023-09-05 17:17:03
0
1
685
<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粉156532706
P粉156532706

모든 응답(1)
P粉729518806

TLDR:

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

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

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

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

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

으아악

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

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿