C # HTML Agility Pack - Syntaxe SelectSingleNode et SelectNodes XPath

c# html-agility-pack web-scraping xpath

Question

Ma question est très similaire à celle-ci : la syntaxe XmlNode.SelectSingleNode pour rechercher dans un nœud en C #

J'essaie d'utiliser HTML Agility Pack pour déterminer le prix / l'état / le prix du navire ... Voici l'URL que je racle: http://www.amazon.com/gp/offer-listing/0470108541/ref=dp_olp_used?ie = UTF8 & condition = all

Voici un extrait de mon code:


    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;

Peu importe la combinaison que j'essaie de .// et. et ./ et / etc ... Je ne peux pas obtenir ce que je veux (je viens tout juste d'essayer d'apprendre xpaths), mais actuellement, il ne retourne que le premier élément, encore et encore, tout comme la question initiale que j'ai déjà évoquée. Je pense qu'il me manque une compréhension fondamentale du fonctionnement de la sélection des nœuds et / ou de ce qui est considéré comme un nœud.


METTRE À JOUR


Ok, j'ai changé l'URL pour pointer vers un livre différent et les deux premiers éléments fonctionnent comme prévu ... Lorsque j'essaie de remplacer le troisième élément (price_shipping) par ".//", aucune information n'est extraite de rien. Cela doit être dû au fait qu’il n’ya même pas de prix d’expédition et que cette durée est omise. Comment puis-je gérer cela? J'ai essayé si price_shipping! = Null.


METTRE À JOUR


Résolu J'ai enlevé le ".InnerText" de price_shipping qui causait des problèmes quand c'était nul ... alors j'ai fait la vérification nulle et ensuite il était sûr d'utiliser .InnerText.

Réponse populaire

Résolu J'ai enlevé le ".InnerText" de price_shipping qui causait des problèmes quand c'était nul ... alors j'ai fait la vérification nulle et ensuite il était sûr d'utiliser .InnerText.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi