Comment accéder au contenu de plusieurs <div> des balises avec HTMLAgilityPack?

c# html html-agility-pack wpf

Question

Je ne parviens pas à trouver la documentation de HTMLAgilityPack sur le site Web codeplex. Actuellement, je souhaite accéder à une div sur le site Web d'Amazon et supprimer des informations textuelles pour les utiliser dans une application WPF.

var getWeb = new HtmlWeb();                     
var doc = getWeb.Load(uri);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//div[@id = 'zg_centerListWrapper']");

Cette div contient environ 12 autres divs, chacun étant un article de la catégorie des best sellers .

Pour accéder aux propriétés de chacun, il semblerait que ce soit un travail fastidieux (et je ne suis pas non plus tout à fait sûr de savoir comment le faire à première vue). Donc, devrais-je plutôt utiliser DocumentNode.SelectNodes() ? Et comment pourrais-je le mettre en œuvre? Aussi, j'ai du mal à croire qu'après une telle période, il n'y ait plus de documentation pour HTMLAgilityPack ... Peut-être que je cherche au mauvais endroit car youtube semble être ma meilleure source pour le moment.

Réponse acceptée

En fait, les paramètres de SelectNodes() et SelectSingleNode() sont une expression xpath, xpath version 1.0 pour être précis (voir spécification xpath 1.0 ici ).

XPath est une autre technologie avec ses propres spécifications, documentation et discussion. Vous pouvez généralement rechercher des tutoriels ou des articles xpath au lieu des spécificités HtmlAgilityPack (HAP), pour avoir une meilleure idée du type d'expression à transmettre à HAP pour obtenir des éléments HTML particuliers.

Par exemple, supposons que votre code HTML ressemble à ceci:

<div id="zg_centerListWrapper">
    <div>I want this</div>
    <div>..and this</div>
    <div>..and this one too</div>
</div>

voyez que les div qui vous intéressent sont des enfants directs du div[@id = 'zg_centerListWrapper'] , alors vous pouvez utiliser le xpath suivant pour les obtenir:

<div id="zg_centerListWrapper">
    <div>I want this</div>
    <div>..and this</div>
    <div>..and this one too</div>
</div>

Réponse populaire

Vous pouvez utiliser DocumentNode.Descendants("div") puis quelque chose comme:

.Where(div => div.Attributes.Contains("class") && div.Attributes["class"].Value.Contains("best category"))

Mais oui, la documentation aiderait certainement ..




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