C#HTML Agility Pack SelectSingleNode和SelectNodes XPath语法

时间:2013-08-08 01:01:52

标签: c# xpath web-scraping html-agility-pack

我的问题非常类似于XmlNode.SelectSingleNode syntax to search within a node in C#

我正在尝试使用HTML Agility Pack来提取价格/条件/出货价...这是我正在抓取的网址:http://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used?ie=UTF8&condition=all

以下是我的代码片段:


    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),目前它只是一遍又一遍地返回第一项,就像我之前提到的原始问题一样。我认为我缺少对选择节点如何工作和/或什么被视为节点的基本理解。


更新


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


更新


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

1 个答案:

答案 0 :(得分:0)

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