C# Html敏捷性从表中打包空值

C# Html敏捷性从表中打包空值,c#,html,web-scraping,html-agility-pack,C#,Html,Web Scraping,Html Agility Pack,我正在尝试学习一些基本的刮削,多亏了这个网站,我学到了很多新东西,但现在我遇到了这个问题……我使用的代码如下: var web = new HtmlWeb(); var doc = web.Load("url"); var nodes = doc.DocumentNode.SelectNodes("//*[@id='hotellist_inner']/div"); StreamWriter output = new StreamWriter("out.txt"); if (nodes != n

我正在尝试学习一些基本的刮削,多亏了这个网站,我学到了很多新东西,但现在我遇到了这个问题……我使用的代码如下:

var web = new HtmlWeb();
var doc = web.Load("url");
var nodes = doc.DocumentNode.SelectNodes("//*[@id='hotellist_inner']/div");
StreamWriter output = new StreamWriter("out.txt");

if (nodes != null)
{
    foreach (HtmlNode item in nodes)
    {
        if (item != null && item.Attributes["data-recommended"] != null)
        {
            string line = "";
            var nome = item.SelectSingleNode(".//h3/a").InnerText;
            var rating = item.SelectSingleNode(".//span[@class='rating']").InnerText;
            var price = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/strong[1]");
            var discount = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/div[1]");
            line = line + nome + "," + rating + "," + price + "," + discount;
            Console.WriteLine(line);
            output.WriteLine(line);
        }
    }
}
对于前两个项目(名称和评级),这一切都很好,但当涉及到价格和折扣时,我得到的结果是空的。我已经用chrome scraper分析了这个页面(这里是),它使用我使用的xpath很容易得到结果。我不明白我做错了什么。
任何帮助都将不胜感激D

快速浏览您试图浏览的网页后,并非所有的
商品
都有价格和折扣信息。您需要正确地处理这种情况以避免异常,例如,在获取
InnerText
之前检查
null
。您的代码稍作更改后,就可以在可用的位置获取价格和折扣信息:

if (item != null && item.Attributes["data-recommended"] != null)
{
    string line = "";
    var nome = item.SelectSingleNode(".//h3/a").InnerText;
    var rating = item.SelectSingleNode(".//span[@class='rating']").InnerText;
    var price = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/strong[1]");
    var discount = item.SelectSingleNode("./div[2]/div[3]/div[2]/table/tbody/tr/td[4]/div/div[1]");
    //set priceString to empty string if price is null, else set it to price.InnerText
    var priceString = price == null ? "" : price.InnerText;
    //do similar step for discountString
    var discountString = discount == null ? "" : discount.InnerText;
    line = line + nome + "," + rating + "," + priceString + "," + discountString;
    Console.WriteLine(line);
    output.WriteLine(line);
}

谢谢你的回答!我尝试了你的改变,但遗憾的是我仍然得到了空的结果。我可以得到正确的名称和评级,但其他项目是空的,好像没有任何价格在源页面,而我可以看到有一些!为什么代码对你有效而对我无效( :(看起来好像它根本无法读取表中的内容…有可能吗?事实上,如果我尝试从主节点获取所有HTML,我仍然无法获得价格或折扣…我的朋友!我已经找到了无法获取价格的原因!!加载了Web的页面。加载与您按照链接访问的页面不同!我已经让程序完成了wnload将web.load中加载的页面加载为HTML,然后我用浏览器打开它,页面不同,没有显示价格…为什么会发生这种情况?