使用C#编写的Html Agility Pack来下载比特币价格
P粉156532706
P粉156532706 2023-09-05 17:17:03
[HTML讨论组]
<p>我需要使用Html Agility Pack从https://coinmarketcap.com/currencies/bitcoin/获取比特币价格。我正在使用这个例子,它运行良好:</p> <pre class="brush:php;toolbar:false;">var html = @&quot;http://html-agility-pack.net/&quot;; HtmlWeb web = new HtmlWeb(); var htmlDoc = web.Load(html); var node = htmlDoc.DocumentNode.SelectSingleNode(&quot;//head/title&quot;); Console.WriteLine(&quot;Node Name: &quot; + node.Name + &quot;\n&quot; + node.OuterHtml);</pre> <p>XPath为:<code>//*[@id=&quot;__next&quot;]/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;">&lt;div class=&quot;priceValue &quot;&gt;&lt;span&gt;$17,162.42&lt;/span&gt;&lt;/div&gt;</pre> <p>我尝试了下面的代码,但它返回"对象引用未设置为对象的实例":</p> <pre class="brush:php;toolbar:false;">var html = @&quot;https://coinmarketcap.com/currencies/bitcoin/&quot;; HtmlWeb web = new HtmlWeb(); var htmlDoc = web.Load(html); var node = htmlDoc.DocumentNode.SelectSingleNode(&quot;//div[@class='priceValue']/span&quot;); Console.WriteLine(&quot;Node Name: &quot; + node.Name + &quot;\n&quot; + 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默认不解压它收到的响应。有关详细信息,请参见github问题。如果你使用了一个合适的HTTP客户端(像这个),或者如果HtmlAgilityPack开发人员更加积极,我认为你不会遇到这个问题。

如果你坚持使用HtmlWeb,你的代码应该如下所示:

const string html = @"https://coinmarketcap.com/currencies/bitcoin/";
        
var web = new HtmlWeb
{
    AutomaticDecompression = DecompressionMethods.GZip
};
HtmlDocument doc = web.Load(html);

HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='priceValue ']/span");

请注意,你要查找的元素的类实际上是priceValue (末尾有一个空格字符),页面中还有另一个类为priceValuediv。不过,这是另一个问题,你应该最终能够找到一个更健壮的选择器。也许可以尝试这样:

HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[contains(@class, 'priceSection')]//div[contains(@class, 'priceValue')]/span");
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号