SelectSingleNode 和 SelectNodes XPath 语法

问题描述 投票:0回答:1

我的问题与此非常相似 XmlNode.SelectSingleNode 语法在 C# 中的节点内搜索

我正在尝试使用 HTML Agility Pack 来提取价格/条件/运费...这是我正在抓取的 URL:http://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used ?ie=UTF8&条件=全部

这是我的代码片段:


    string results = "";
    var w = new HtmlWeb();
    var doc = w.Load(url);
    var nodes = doc.DocumentNode.SelectNodes("//div[@class='a-row a-spacing-medium olpOffer']");

    if (nodes != null)
    {
         foreach (HtmlNode item in nodes)
         {
              var price = item.SelectSingleNode(".//span[@class='a-size-large a-color-price olpOfferPrice a-text-bold']").InnerText;
              var condition = item.SelectSingleNode(".//h3[@class='a-spacing-small olpCondition']").InnerText;
              var price_shipping = item.SelectSingleNode("//span[@class='olpShippingPrice']").InnerText;
              results += "price " + price + " condition " + condition + " ship " + price_shipping + "\r\n";
         }
    }
    return results;

无论我尝试 .// 和 . 的哪种组合。和 ./ 和 / 等...我无法得到我想要的东西(刚刚尝试学习 xpaths),而且目前它只是一遍又一遍地返回第一项,就像我之前提到的原始问题一样。我认为我缺少对选择节点如何工作和/或什么被视为节点的基本理解。


更新


好的,我已更改 URL 以指向另一本书,前两项按预期工作...当我尝试将第三项 (price_shipping) 更改为“.//”时,绝对没有任何信息从任何东西中拉出来。这一定是因为有时甚至没有运费并且忽略了该跨度。我该如何处理这个问题?我尝试过如果price_shipping!=null。


更新


解决了。我从 Price_shipping 中删除了“.InnerText”,当它为空时会导致问题...然后我进行了空检查,然后可以安全地使用 .InnerText。

c# xpath web-scraping html-agility-pack
1个回答
0
投票

解决了。我从 Price_shipping 中删除了“.InnerText”,当它为空时会导致问题...然后我进行了空检查,然后可以安全地使用 .InnerText。

© www.soinside.com 2019 - 2024. All rights reserved.