TLDR?:
HtmlWeb
de décompresser la réponse (ou d'utiliser un client HTTP adapté) évidemment, SelectSingleNode()
調(diào)用返回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?:
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("http://div[@class='priceValue ']/span");
Veuillez noter que la classe de l'élément que vous recherchez est en réalité priceValue
(末尾有一個(gè)空格字符),頁(yè)面中還有另一個(gè)類為priceValue
的div
. C'est une autre question, cependant, et vous devriez éventuellement pouvoir trouver un sélecteur plus robuste. Essayez peut-être ceci?:
HtmlNode node = doc.DocumentNode.SelectSingleNode("http://div[contains(@class, 'priceSection')]//div[contains(@class, 'priceValue')]/span");