¿Cómo accedo al contenido de múltiples? <div> etiquetas con HTMLAgilityPack?

c# html html-agility-pack wpf

Pregunta

No puedo encontrar la documentación para el HTMLAgilityPack en el sitio web de codeplex. Actualmente, lo que quiero hacer es acceder a un div en el sitio web de Amazon y raspar la información de texto para usarla en una aplicación WPF.

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

Este div contiene alrededor de otros 12 divs, cada uno es un artículo en la categoría de los best sellers .

Para acceder a las propiedades de cada uno parece ser minucioso (y tampoco estoy completamente seguro de cómo lo haría a primera vista). Entonces, ¿debería usar DocumentNode.SelectNodes() ? ¿Y cómo lo implementaría? También me resulta difícil creer que después de ese tiempo no haya documentación para el HTMLAgilityPack ... Tal vez esté buscando en los lugares equivocados porque YouTube parece ser mi mejor fuente en este momento.

Respuesta aceptada

En realidad, el parámetro de SelectNodes() y SelectSingleNode() es una expresión xpath, xpath versión 1.0 para ser precisos (consulte las especificaciones de xpath 1.0 aquí ).

XPath es otra tecnología con sus propias especificaciones, documentación y discusión. En general, puede buscar tutoriales o artículos de xpath en lugar de los específicos de HtmlAgilityPack (HAP), para tener una mejor idea de qué tipo de expresión debe pasar a HAP para obtener elementos HTML específicos.

Por ejemplo, suponga que su HTML se ve así:

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

vea que los div s que le interesan son hijos directos del div[@id = 'zg_centerListWrapper'] , luego puede usar la siguiente xpath para obtenerlos:

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

Respuesta popular

Puedes usar DocumentNode.Descendants("div") y luego algo como

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

Pero sí, la documentación sin duda ayudaría ...




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é