Dati del nodo interno con HtmlAgilityPack C #

.net c# html html-agility-pack parsing

Domanda

Sto usando HtmlAgilityPack per leggere dati / stringa da una pagina web.

Il mio html è qui in fiddle

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

Ecco il mio codice

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;

}
}

Per favore guidami come ottenere i valori div attraverso le classi

Risposta accettata

Nota : il sotto non è stato testato, ho appena guardato l'HTML della pagina e ho cercato di capire come si "adatta" insieme.

Ogni "risultato" dell'auto ha un div con la search-results-box della classe. Così....

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

}

Hai ogni "risultato auto" (come in, ogni elemento è ora l'intera sezione che rappresenta una delle macchine ... quindi scavare più in profondità ....

All'interno di ciascuno di questi, i dati dell'auto si trovano all'interno di un altro div , con i dati di search-results-data della classe ... quindi ....

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

}

All'interno di questo , ora scaverai ancora più a fondo. Il titolo dell'auto è all'interno di un altro elemento, in particolare all'interno di un bambino h2 ...

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

}

Il prezzo dell'auto è più difficile grazie alla marcatura orribile nell'HTML.

Si trova all'interno di un elemento font che si trova all'interno di un altro div ...

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

}

Il problema è che il prezzo è bloccato insieme come "AED 24.500" in un elemento. Quindi puoi facilmente ottenere l'elemento, ma se vuoi solo il numero, è logico che dovrai capire da solo.

L' immagine stessa, va bene. Questo è un livello superiore nel markup, il backup di un bambino sotto la carResult , quindi andiamo .....:

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

}

Re-edit

Tutte le informazioni "Ulteriori dettagli su questa macchina usata" sono inserite in un'unica posizione, quindi il seguente funzionerà per il tuo esempio ma potrebbe non funzionare per tutti:

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

}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché