C#HTML Agility Pack SelectSingleNode和SelectNodes XPath語法

c# html-agility-pack web-scraping xpath

我的問題非常類似於這個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是安全的。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因