我正在尝试使用Agility包来解析各个页面中的某些信息。我有点担心使用它可能对我需要的东西有点过头了,如果是这种情况可以随时让我知道。无论如何,我试图从杂乱的傻瓜解析一个页面,以获得基于股票代码的公司名称。我将解析几个页面以类似的方式获取股票信息。
我要解析的HTML看起来像:
<h1 class="subHead">
Microsoft Corp <span>(NASDAQ:MSFT)</span>
</h1>
此外,我要解析的页面是:http://caps.fool.com/Ticker/MSFT.aspx
所以,我想我的问题是如何从html中获取Microsoft Corp,我是否应该使用敏捷包来做这样的事情?
修改:当前代码
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;
}
答案 0 :(得分:2)
这将为您提供所有股票名称的列表,仅适用于Microsoft的示例Html:
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)"
}
根据更新的问题修改 - 这应该适合您:
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;
答案 1 :(得分:1)
使用xpath表达式选择元素然后拾取文本。
foreach (var element in doc.DocumentNode.SelectNodes("//h1[@clsss='subHead']/span"))
{
Console.WriteLine (element.InnerText);
}