Rumah > Soal Jawab > teks badan
P粉7295188062023-09-06 09:17:49
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:
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");
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:
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[contains(@class, 'priceSection')]//div[contains(@class, 'priceValue')]/span");