Sintaxis de C # HTML Agility Pack SelectSingleNode y SelectNodes XPath

c# html-agility-pack web-scraping xpath

Pregunta

Mi pregunta es muy similar a esta sintaxis de XmlNode.SelectSingleNode para buscar dentro de un nodo en C #

Estoy tratando de usar HTML Agility Pack para obtener precio / condición / precio de envío ... Aquí está la URL que estoy raspando: http://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used?ie = UTF8 & condition = all

Aquí hay un fragmento de mi código:


    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;

No importa qué combinación intente .// y. y ./ y / etc ... No puedo obtener lo que quiero (solo ahora tratando de aprender xpaths), también actualmente está devolviendo solo el primer elemento una y otra vez, al igual que la pregunta original a la que hice referencia anteriormente. Creo que me falta una comprensión fundamental de cómo funcionan los nodos de selección y / o lo que se considera un nodo.


ACTUALIZAR


Ok, he cambiado la URL para que apunte a un libro diferente y los dos primeros elementos funcionan como se esperaba ... Cuando intento cambiar el tercer elemento (price_shipping) a un ".//" Absolutamente no se está extrayendo información de cualquier cosa. Esto se debe a que en algún momento ni siquiera hay un precio de envío y se omite ese intervalo. ¿Cómo manejo esto? Lo intenté si price_shipping! = Null.


ACTUALIZAR


Resuelto Eliminé el ".InnerText" de price_shipping que causó problemas cuando era nulo ... luego realicé la comprobación nula y luego fue seguro usar .InnerText.

Respuesta popular

Resuelto Eliminé el ".InnerText" de price_shipping que causó problemas cuando era nulo ... luego realicé la comprobación nula y luego fue seguro usar .InnerText.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué