C # HTML Agility Pack SelectSingleNode и SelectNodes XPath синтаксис

c# html-agility-pack web-scraping xpath

Вопрос

Мой вопрос очень похож на этот синтаксис 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;

Независимо от того, какую комбинацию я пытаюсь .// и. и ./ и / etc ... Я не могу получить то, что хочу (только сейчас, пытаясь узнать xpaths), также в настоящее время он возвращает только один элемент снова и снова, как и исходный вопрос, на который я ссылался ранее. Я думаю, что мне не хватает фундаментального понимания того, как работают узлы и / или что считается узлом.


ОБНОВИТЬ


Хорошо, я изменил URL-адрес, чтобы указать на другую книгу, и первые два элемента работают так, как ожидалось ... Когда я пытаюсь изменить третий элемент (price_shipping) на «.//» Абсолютно никакой информации не тянет от чего угодно. Это должно произойти из-за того, что когда-либо нет даже цены доставки, и этот пробел опущен. Как я могу справиться с этим? Я пробовал, если price_shipping! = Null.


ОБНОВИТЬ


Решаемые. Я удалил «.InnerText» из price_shipping, который вызывал проблемы, когда он был null ... тогда я сделал нулевую проверку, и тогда было безопасно использовать .InnerText.

Популярные ответы

Решаемые. Я удалил «.InnerText» из price_shipping, который вызывал проблемы, когда он был null ... тогда я сделал нулевую проверку, и тогда было безопасно использовать .InnerText.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему