Datos internos del nodo con HtmlAgilityPack C #

.net c# html html-agility-pack parsing

Pregunta

Estoy usando HtmlAgilityPack para leer datos / cadena de una página web.

Mi html está aquí en violín

http://jsfiddle.net/7DWfa/1/

Aqui esta mi codigo

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
HtmlNode.ElementsFlags.Remove("option");
htmlDoc.LoadHtml(s);
if (htmlDoc.DocumentNode != null){
HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
if (bodyNode != null)
{//what to do here to get title and href?
var inputs = from input in htmlDoc.DocumentNode.Descendants("div")
                     where input.Attributes["class"].Value == "results-data-price-btn"
                     select input;

}
}

Por favor, guíame cómo obtener valores div a través de clases

Respuesta aceptada

Nota : lo siguiente no está probado, simplemente observé rápidamente el código HTML de la página y traté de entender cómo encaja.

El 'resultado' de cada automóvil tiene un div con el search-results-box clase. Asi que....

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

Tienes cada 'resultado del auto' (como en, cada elemento es ahora la sección completa que representa uno de los autos ... así que profundiza ...

Dentro de cada uno de estos, los datos del auto están dentro de otra div , con la clase search-results-data ... así que ...

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

Dentro de esto , ahora cavarás aún más profundo. El título del auto está dentro de otro elemento, específicamente dentro de un niño h2 ...

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

El precio del auto es más difícil gracias al horrible marcado en el HTML.

Se encuentra dentro de un elemento de font que está dentro de otra div ...

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

El problema es que el precio está pegado como "AED 24,500" en un elemento. Por lo tanto, puede obtener fácilmente el elemento, pero si solo desea el número, esa es la lógica que deberá averiguar por sí mismo para hacerlo.

La imagen en sí, está bien. Ese es un nivel más alto en el marcado, una copia de seguridad como un niño debajo del carResult , así que subimos ...

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}

Reeditar

Toda la información de 'Más detalles sobre este automóvil usado' se rellena en un solo lugar, por lo que la siguiente información funcionará para su ejemplo, pero es posible que no funcione para todos ellos:

var rootNode = htmlDoc.DocumentNode;
var allCarResults = rootNode.SelectNodes("//div[normalize-space(@class)='search-results-box']");
foreach (var carResult in allCarResults)
{

}



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é