Sintassi di XPath C # HTML Agility Pack SelectSingleNode e SelectNodes XPath

c# html-agility-pack web-scraping xpath

Domanda

La mia domanda è molto simile a questa sintassi XmlNode.SelectSingleNode per cercare all'interno di un nodo in C #

Sto cercando di utilizzare HTML Agility Pack per aumentare prezzo / condizioni / prezzo nave ... Ecco l'URL che sto provando: http://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used?ie = UTF8 & condizione = tutto

Ecco uno snippet del mio codice:


    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;

Non importa quale combinazione cerco di .// e. e ./ e / etc ... Non riesco a ottenere ciò che voglio (solo ora sto provando ad imparare xpaths), inoltre attualmente restituisco solo il primo elemento più e più volte, proprio come la domanda originale a cui ho fatto riferimento in precedenza. Penso che mi manchi una comprensione fondamentale di come funzionano i nodi di selezione e / o cosa è considerato un nodo.


AGGIORNARE


Ok, ho cambiato l'URL per indicare un altro libro e i primi due elementi funzionano come previsto ... Quando provo a cambiare il terzo elemento (price_shipping) in un ".//" Assolutamente nessuna informazione viene tirata da qualsiasi cosa. Questo deve essere dovuto al fatto che non esiste nemmeno un prezzo di spedizione e tale intervallo viene omesso. Come gestisco questo? Ho provato se price_shipping! = Null.


AGGIORNARE


Risolto. Ho rimosso ".InnerText" dal prezzo_shipping che causava problemi quando era nullo ... quindi ho eseguito il controllo nullo e quindi era sicuro utilizzare .InnerText.

Risposta popolare

Risolto. Ho rimosso ".InnerText" dal prezzo_shipping che causava problemi quando era nullo ... quindi ho eseguito il controllo nullo e quindi era sicuro utilizzare .InnerText.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché