Html Agility Pack: cómo seleccionar la clase de intervalo correcta

c# html-agility-pack

Pregunta

Estoy tratando de encontrar el precio más bajo en las páginas de Amazon. Usemos esta url como ejemplo:

http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=9963BB#/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=E999-4701&rh=i%3Aaps%2Ck%3AE999-4701

Quiero encontrar el precio más bajo ... el número a la derecha de "nuevo desde".

Esto es lo que he intentado:

        using (TextWriter tw = new StreamWriter(@"D:\AmazonUrls.txt"))
        {
            foreach (string item in list)
            {
                var webGet = new HtmlWeb();
                var document = webGet.Load(item);
                var lowestPrice = document.DocumentNode.SelectSingleNode("//span[@id='subPrice']");
                if (lowestPrice != null)
                {
                    Console.WriteLine(lowestPrice);                
                }

            }           
        }

No estoy obteniendo ningún resultado. ¿A dónde me voy mal?

Respuesta aceptada

Está solicitando nodos con un id de subprecio, pero en realidad es una class que tiene subprecio:

<span class="subPrice">
        <a href="http://rads.stackoverflow.com/amzn/click/B001BA0W06">5 new</a>
    from <span class="price">$245.90</span></span>

asi que,

var lowestPrice = document.DocumentNode.SelectSingleNode("//span[@class='subPrice']");

Debería conseguirte lo que quieres. Sin embargo, la página de ejemplo que da tiene varios nodos que coinciden con ese patrón, por lo que debe seleccionar varios nodos y luego recorrerlos para decidir cuál tiene el privilegio más bajo.



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é