cari

Rumah  >  Soal Jawab  >  teks badan

Muat turun harga Bitcoin menggunakan Html Agility Pack yang ditulis dalam C#

<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>
P粉156532706P粉156532706530 hari yang lalu797

membalas semua(1)saya akan balas

  • P粉729518806

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

    TLDR:

    1. Anda perlu memberitahu HtmlWeb untuk menyahmampat respons (atau gunakan klien HTTP yang sesuai)
    2. Anda perlu membetulkan pemilih XPath

    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 HtmlWebsecara 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 (末尾有一个空格字符),页面中还有另一个类为priceValuediv. 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");

    balas
    0
  • Batalbalas