C#HTML Agility Pack SelectSingleNode和SelectNodes XPath语法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (149)

我的问题非常类似于这个XmlNode.SelectSingleNode语法在C#中的节点内搜索

我正在尝试使用HTML Agility Pack来提取价格/条件/发货价格...这是我正在抓取的网址: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;

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

UPDATE

好的,我已将URL更改为指向另一本书,前两项正在按预期工作...当我尝试将第三项(price_shipping)更改为“.//”时,绝对没有信息被提取从任何事情。这必须是由于某个时候甚至没有运费价格而且省略了该跨度。我该如何处理?我尝试过如果price_shipping!= null。

UPDATE

解决了。我从price_shipping中删除了“.InnerText”,当它为null时导致问题...然后我进行了空检查,然后使用.InnerText是安全的。

提问于
用户回答回答于

解决了。我从price_shipping中删除了“.InnerText”,当它为null时导致问题...然后我进行了空检查,然后使用.InnerText是安全的。

扫码关注云+社区

领取腾讯云代金券