Domanda di HTML Agility Pack (Tentativo di analizzare la stringa dal sorgente)

c# html html-agility-pack html-parsing

Domanda

Sto tentando di utilizzare il pacchetto Agility per analizzare alcuni bit di informazioni da varie pagine. Sono un po 'preoccupato che l'utilizzo di questo potrebbe essere eccessivo per quello che mi serve, se questo è il caso sentitevi liberi di farmelo sapere. Ad ogni modo, sto tentando di analizzare una pagina di motley fool per ottenere il nome di un'azienda basata sul ticker. Analizzerò diverse pagine per ottenere informazioni sullo stock in modo simile.

L'HTML che voglio analizzare assomiglia a:

<h1 class="subHead"> 
    Microsoft Corp <span>(NASDAQ:MSFT)</span>
</h1>

Inoltre, la pagina che voglio analizzare è: http://caps.fool.com/Ticker/MSFT.aspx

Quindi, suppongo che la mia domanda sia: come posso semplicemente ottenere Microsoft Corp dall'html e dovrei persino usare il pacchetto agility per fare cose come questa?

Modifica: codice corrente

<h1 class="subHead"> 
    Microsoft Corp <span>(NASDAQ:MSFT)</span>
</h1>

Risposta accettata

Questo ti darebbe un elenco di tutti i nomi azionari, per il tuo esempio di codice HTML solo di Microsoft:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("test.html");

var nodes = doc.DocumentNode.SelectNodes("//h1[@class='subHead']");
foreach (var node in nodes)
{
    string text = node.FirstChild.InnerText; //output: "Microsoft Corp"
    string textAll = node.InnerText; //output: "Microsoft Corp (NASDAQ:MSFT)"
}

Modifica in base alla domanda aggiornata: questo dovrebbe funzionare per te:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("test.html");

var nodes = doc.DocumentNode.SelectNodes("//h1[@class='subHead']");
foreach (var node in nodes)
{
    string text = node.FirstChild.InnerText; //output: "Microsoft Corp"
    string textAll = node.InnerText; //output: "Microsoft Corp (NASDAQ:MSFT)"
}

Risposta popolare

Utilizzare un'espressione xpath per selezionare l'elemento quindi prelevare il testo.

 foreach (var element in doc.DocumentNode.SelectNodes("//h1[@clsss='subHead']/span"))
 {
    Console.WriteLine (element.InnerText);
 } 



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é