Téléchargez les prix Bitcoin à l'aide de Html Agility Pack écrit en C#
P粉156532706
P粉156532706 2023-09-05 17:17:03
0
1
517

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 :

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);

XPath est : //*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[2]/div/ div[2]/div[1]/div

Code HTML :

17 162,42 $

J'ai essayé le code suivant mais il renvoie "Référence d'objet non définie sur une instance d'un objet" :

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);`

P粉156532706
P粉156532706

répondre à tous (1)
P粉729518806

TLDR :

  1. Vous devez dire àHtmlWebde décompresser la réponse (ou d'utiliser un client HTTP adapté)
  2. Vous devez réparer le sélecteur XPath

É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 dehtmlDoc.DocumentNode.InnerHtml. J'ai essayé de faire cela et le "HTML" généré n'a aucun sens.

La raison est queHtmlWebpar défaut, il ne décompresse pas les réponses qu'il reçoit. Voircenuméro github pour plus de détails. Si vous utilisiez un client HTTP approprié (commecelui-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 utiliserHtmlWeb, 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("//div[@class='priceValue ']/span");

Veuillez noter que la classe de l'élément que vous recherchez est en réalitépriceValue(末尾有一个空格字符),页面中还有另一个类为priceValuediv. 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("//div[contains(@class, 'priceSection')]//div[contains(@class, 'priceValue')]/span");
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!