C# で書かれた Html Agility Pack を使用してビットコインの価格をダウンロードする
P粉156532706
P粉156532706 2023-09-05 17:17:03
0
1
686
<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粉156532706
P粉156532706

全員に返信(1)
P粉729518806

TLDR:

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

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

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

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

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

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート