HTML Agility Pack问题(尝试从源解析字符串)

时间:2011-04-10 20:57:05

标签: c# html html-parsing html-agility-pack

我正在尝试使用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;
}

2 个答案:

答案 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);
 }