C#으로 작성된 Html Agility Pack을 사용하여 비트코인 가격 다운로드
P粉156532706
2023-09-05 17:17:03
<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>
TLDR:
HtmlWeb
지시해야 합니다(또는 적합한 HTTP 클라이언트를 사용하십시오)분명히
SelectSingleNode()
调用返回null
노드를 찾을 수 없기 때문입니다.이 경우 로드된 HTML을 검사하는 것이 도움이 됩니다.
htmlDoc.DocumentNode.InnerHtml
값을 가져오면 이를 수행할 수 있습니다. 나는 이것을 시도했지만 생성된 "HTML"은 의미가 없습니다.이유는
HtmlWeb
기본적으로 수신된 응답의 압축을 풀지 않기 때문입니다. 자세한 내용은 thisgithub 문제를 참조하세요. 적절한 HTTP 클라이언트(예: this one)를 사용했거나 HtmlAgilityPack 개발자가 보다 적극적이었다면 이 문제가 발생하지 않을 것이라고 생각합니다.HtmlWeb
를 계속 사용하려는 경우 코드는 다음과 같아야 합니다.찾고 있는 요소의 클래스는 실제로
으아악priceValue
(末尾有一个空格字符),页面中还有另一个类为priceValue
的div
라는 점에 유의하세요. 하지만 이는 또 다른 질문이며 결국에는 보다 강력한 선택기를 찾을 수 있을 것입니다. 아마도 이것을 시도해 보세요: