Téléchargez les prix Bitcoin à l'aide de Html Agility Pack écrit en C#
P粉156532706
2023-09-05 17:17:03
<p>J'ai besoin d'obtenir le prix du Bitcoin sur https://coinmarketcap.com/currencies/bitcoin/ à l'aide de Html Agility Pack. J'utilise cet exemple et cela fonctionne bien : </p>
<pre class="brush:php;toolbar:false;">var html = @"http://html-agility-pack.net/";
HtmlWeb web = nouveau HtmlWeb();
var htmlDoc = web.Load(html);
var node = htmlDoc.DocumentNode.SelectSingleNode("//head/title");
Console.WriteLine("Node du nœud : " + node.Name + "n" + node.OuterHtml);</pre>
<p>XPath est : <code>//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[2]/div/ div[2]/div[1]/div</code></p>
<p>Code HTML : </p>
<pre class="brush:php;toolbar:false;"><div class="priceValue "><span>17 162,42 $</span></div></pre>
<p>J'ai essayé le code suivant mais il renvoie "Référence d'objet non définie sur une instance d'un objet" : </p>
<pre class="brush:php;toolbar:false;">var html = @"https://coinmarketcap.com/currencies/bitcoin/";
HtmlWeb web = nouveau HtmlWeb();
var htmlDoc = web.Load(html);
var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='priceValue']/span");
Console.WriteLine("Node du nœud : " + node.Name + "n" + node.InnerText);`</pre></p>
TLDR :
HtmlWeb
de décompresser la réponse (ou d'utiliser un client HTTP adapté)Évidemment,
SelectSingleNode()
调用返回null
, car il ne trouve pas le nœud.Dans ce cas, il est utile d'inspecter le code HTML chargé. Vous pouvez le faire en obtenant la valeur de
htmlDoc.DocumentNode.InnerHtml
. J'ai essayé de faire cela et le "HTML" généré n'a aucun sens.La raison est que
HtmlWeb
par défaut, il ne décompresse pas les réponses qu'il reçoit. Voir cenuméro github pour plus de détails. Si vous utilisiez un client HTTP approprié (comme celui-ci), ou si les développeurs de HtmlAgilityPack étaient plus proactifs, je ne pense pas que vous auriez ce problème.Si vous insistez pour utiliser
HtmlWeb
, votre code devrait ressembler à ceci :Veuillez noter que la classe de l'élément que vous recherchez est en réalité
priceValue
(末尾有一个空格字符),页面中还有另一个类为priceValue
的div
. C'est une autre question, cependant, et vous devriez éventuellement pouvoir trouver un sélecteur plus robuste. Essayez peut-être ceci :