C# 使用 HtmlAgilityPack 从网站打印特定字符串

C# Print a specific string fom a website using HtmlAgilityPack

我需要从我们用于获取数据的网站获取一些文本。我终于找到了如何使用 HtmlAgilityPack 并找到 Xpath 我能够从网站上打印出一些文本。

但是当我尝试打印日期和种类时,编码如下:

<span class="span-line-break">zaterdag 05 december 2020</span> //Date
<span class="afvaldescr">Papier en karton</span> //Kind

我无法使用我当前的代码访问这两个字符串:

        public string Postalcode = "6093DK";
        public string Number = "2";
        public string Add = "";


            string url = "https://mijnafvalwijzer.nl/nl/" + Postalcode + "/" + Number + "/" + Add;
            var web = new HtmlAgilityPack.HtmlWeb();
            HtmlDocument doc = web.Load(url);
            
            string when = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]/div/table[1]/tbody/tr/td[1]/a/p/span[1]")[0].InnerText;
            string what = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]/div/table[1]/tbody/tr/td[1]/a/p/span[2]")[0].InnerText;

            textBox1.Text = when;
            textBox2.Text = what;

我想因为文本在 class 我无法访问它。

谁能帮我找到这些字符串的更具体路径?

该网站是荷兰垃圾日历,请不要介意。

浏览器为 table 元素插入 tbody,尽管它不存在于 html 中。所以在这里我只是从您的 XPath 中删除了 tbody。在 Chrome 中,您可以使用网络选项卡查看原始回复

string when = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]/div/table[1]/tr/td[1]/a/p/span[1]")[0].InnerText;
string what = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]/div/table[1]/tr/td[1]/a/p/span[2]")[0].InnerText;

您还可以使用“//”和 class 选择器来使用 XPath 的缩短版本

string when = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]//table[1]//span[@class=\"span-line-break\"]")[0].InnerText;
string what = doc.DocumentNode.SelectNodes("//*[@id=\"december-2020\"]//table[1]//span[@class=\"afvaldescr\"]")[0].InnerText;