Pregunta de HTML Agility Pack (Intentando analizar la cadena desde la fuente)

c# html html-agility-pack html-parsing

Pregunta

Estoy intentando usar el paquete Agility para analizar ciertos bits de información de varias páginas. Estoy un poco preocupado de que usar esto podría ser una exageración para lo que necesito, si ese es el caso, no dude en avisarme. De todos modos, estoy intentando analizar una página de motley tonto para obtener el nombre de una empresa basada en el teletipo. Voy a analizar varias páginas para obtener información de stock de una manera similar.

El HTML que quiero analizar parece:

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

Además, la página que quiero analizar es: http://caps.fool.com/Ticker/MSFT.aspx

Entonces, supongo que mi pregunta es ¿cómo obtengo simplemente Microsoft Corp del html e incluso debería usar el paquete de agilidad para hacer cosas como esta?

Edición: Código actual

public String getStockName(String ticker)
{
    String text ="";
    HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://caps.fool.com/Ticker/" + ticker + ".aspx");

    var node = doc.DocumentNode.SelectSingleNode("/h1[@class='subHead']");
    text = node.FirstChild.InnerText.Trim();
    return text;
}

Respuesta aceptada

Esto le daría una lista de todos los nombres de acciones, para su muestra Html solo de 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)"
}

Edición basada en una pregunta actualizada: esto debería funcionar para usted:

string text = "";
HtmlWeb web = new HtmlWeb();

string url = string.Format("http://caps.fool.com/Ticker/{0}.aspx", ticker);
HtmlAgilityPack.HtmlDocument doc = web.Load(url);

var node = doc.DocumentNode.SelectSingleNode("//h1[@class='subHead']");
text = node.FirstChild.InnerText.Trim();
return text;

Respuesta popular

Use una expresión xpath para seleccionar el elemento y luego recoger el texto.

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


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é