ホームページ  >  に質問  >  本文

C# で書かれた Html Agility Pack を使用してビットコインの価格をダウンロードする

<p>HTML Agility Pack を使用して、https://coinmarketcap.com/currency/bitcoin/ からビットコインの価格を取得する必要があります。私はこの例を使用していますが、正常に動作します: </p> <pre class="brush:php;toolbar:false;">var html = @"http://html-agility-pack.net/"; HtmlWeb web = new 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

<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 web = new HtmlWeb(); var htmlDoc = web.Load(html); var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='priceValue']/span"); Console.WriteLine("ノード名: "node.Name"\n"node.InnerText);`</pre></p>
P粉156532706P粉156532706431日前665

全員に返信(1)返信します

  • P粉729518806

    P粉7295188062023-09-06 09:17:49

    TLDR:

    1. 応答を解凍する (または適切な HTTP クライアントを使用する) ように HtmlWeb に指示する必要があります
    2. XPath セレクターを修正する必要があります

    どうやら、SelectSingleNode() 呼び出しでは、ノードが見つからないため、null が返されます。

    この場合、ロードされた HTML を検査すると役に立ちます。これを行うには、htmlDoc.DocumentNode.InnerHtml の値を取得します。これを実行してみましたが、生成された「HTML」は意味がありません。

    その理由は、HtmlWeb がデフォルトでは受信した応答を解凍しないためです。詳細については、この github の問題を参照してください。適切な HTTP クライアント (this など) を使用していれば、または HtmlAgilityPack 開発者がより積極的であれば、この問題は発生しないと思います。

    どうしても HtmlWeb を使用する場合、コードは次のようになります。

    リーリー

    探している要素のクラスは実際には priceValue (末尾にスペース文字があります) であることに注意してください。クラス priceValue# を持つ別の がページ上にあります。 ## ディビジョン。ただし、それは別の問題であり、最終的にはより堅牢なセレクターが見つかるはずです。おそらくこれを試してみてください: リーリー

    返事
    0
  • キャンセル返事