HTML Agility Pack Question (Essai d'analyse de chaîne à partir du source)

c# html html-agility-pack html-parsing

Question

J'essaie d'utiliser le pack Agility pour analyser certaines informations contenues dans différentes pages. Je suis un peu inquiet que l'utilisation de cette option puisse être excessive pour ce dont j'ai besoin, si c'est le cas, n'hésitez pas à me le faire savoir. Quoi qu'il en soit, j'essaie d'analyser une page de motley imbécile pour obtenir le nom d'une société en fonction du ticker. Je vais analyser plusieurs pages pour obtenir des informations sur le stock d'une manière similaire.

Le code HTML que je veux analyser ressemble à ceci:

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

De plus, la page que je veux analyser est la suivante : http://caps.fool.com/Ticker/MSFT.aspx

Donc, je suppose que ma question est de savoir comment obtenir simplement Microsoft Corp du code HTML et devrais-je même utiliser le pack d'agilité pour faire des choses comme celle-ci?

Edit: code actuel

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;
}

Réponse acceptée

Cela vous donnerait une liste de tous les noms d'actions, pour votre exemple HTML juste 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)"
}

Modifier en fonction de la question mise à jour - cela devrait fonctionner pour vous:

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;

Réponse populaire

Utilisez une expression xpath pour sélectionner l'élément, puis récupérez le texte.

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi