Ich versuche, das Agility-Paket zu verwenden, um bestimmte Informationen von verschiedenen Seiten zu analysieren. Ich bin etwas besorgt, dass die Verwendung dieses Overkill für das, was ich brauche, ist, wenn das der Fall ist, fühle mich frei, es mich wissen zu lassen. Wie auch immer, ich versuche eine Seite vom bunten Narren zu analysieren, um den Namen einer Firma basierend auf dem Ticker zu erhalten. Ich werde mehrere Seiten analysieren, um Stock-Informationen auf ähnliche Weise zu erhalten.
Der HTML-Code, den ich analysieren möchte, sieht folgendermaßen aus:
<h1 class="subHead">
Microsoft Corp <span>(NASDAQ:MSFT)</span>
</h1>
Auch die Seite, die ich analysieren möchte, ist: http://caps.fool.com/Ticker/MSFT.aspx
Also, ich denke, meine Frage ist, wie bekomme ich einfach die Microsoft Corp aus dem HTML und sollte ich sogar das Agilität Pack verwenden, um solche Dinge zu tun?
Bearbeiten: Aktueller Code
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;
}
Dies würde Ihnen eine Liste aller Bestandsnamen geben, für Ihre Beispiel-Html nur von 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)"
}
Bearbeiten basierend auf der aktualisierten Frage - das sollte für Sie funktionieren:
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;
Verwenden Sie einen xpath-Ausdruck, um das Element auszuwählen und den Text abzurufen.
foreach (var element in doc.DocumentNode.SelectNodes("//h1[@clsss='subHead']/span"))
{
Console.WriteLine (element.InnerText);
}