Muat turun harga Bitcoin menggunakan Html Agility Pack yang ditulis dalam C#
P粉156532706
2023-09-05 17:17:03
<p>Saya perlu mendapatkan harga Bitcoin daripada https://coinmarketcap.com/currencies/bitcoin/ menggunakan Html Agility Pack. Saya menggunakan contoh ini dan ia berfungsi dengan baik: </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("Nama Nod: " + nod.Name + "n" + nod.OuterHtml);</pre>
<p>XPath ialah: <kod>//*[@id="__next"]/div/div[1]/div[2]/div/div[1]/div[2]/div/ div[2]/div[1]/div</code></p>
<p>Kod HTML: </p>
<pre class="brush:php;toolbar:false;"><div class="priceValue "><span>$17,162.42</span></div></pre>
<p>Saya mencuba kod berikut tetapi ia mengembalikan "Rujukan objek tidak ditetapkan kepada contoh objek": </p>
<pre class="brush:php;toolbar:false;">var html = @"https://coinmarketcap.com/currencies/bitcoin/";
HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(html);
var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='priceValue']/span");
Console.WriteLine("Nod Name: " + nod.Name + "n" + nod.InnerText);`</pre></p>
TLDR:
HtmlWeb
untuk menyahmampat respons (atau gunakan klien HTTP yang sesuai)Jelas sekali,
SelectSingleNode()
调用返回null
, kerana ia tidak dapat mencari nod.Dalam kes ini, adalah berguna untuk memeriksa HTML yang dimuatkan. Anda boleh melakukan ini dengan mendapatkan nilai
htmlDoc.DocumentNode.InnerHtml
. Saya telah mencuba melakukan ini dan "HTML" yang dihasilkan tidak bermakna.Alasannya ialah
HtmlWeb
secara lalai ia tidak menyahmampat respons yang diterima. Lihat iniisu github untuk mendapatkan butiran. Jika anda menggunakan klien HTTP yang betul (seperti yang ini), atau jika pembangun HtmlAgilityPack lebih proaktif, saya tidak fikir anda akan menghadapi masalah ini.Jika anda berkeras untuk menggunakan
HtmlWeb
, kod anda sepatutnya kelihatan seperti ini:Sila ambil perhatian bahawa kelas elemen yang anda cari sebenarnya
priceValue
(末尾有一个空格字符),页面中还有另一个类为priceValue
的div
. Itu satu lagi soalan, walaupun, dan akhirnya anda akan dapat mencari pemilih yang lebih mantap. Boleh cuba ini: