我正在尝试解析Yahoo Finance页面以获取股票代码和公司名称列表。我正在使用的网址是:http://uk.finance.yahoo.com/q/cp?s=%5EFTSE
我正在使用的代码是;
HtmlAgilityPack.HtmlDocument page = new HtmlWeb().Load("http://uk.finance.yahoo.com/q/cp?s=%5EFTSE");
var titles = page.DocumentNode.SelectNodes("//td[@class='yfnc_tabledata1']");
// Returns all titles on the home page of this site in an array.
foreach (var title in titles)
{
txtLog.AppendText(title.InnerHtml + System.Environment.NewLine);
}
txtLog.AppendText行只是我测试。代码正确地获取了包含td节点下的yfnc_tabledata1类的每一行。现在,当我在foreach循环中时,我需要解析title以从以下HTML中获取符号和公司名称;
<b><a href="/q?s=GLEN.L">GLEN.L</a></b>
GLENCORE XSTRAT
<b>343.95</b> <nobr><small>3 May 16:35</small></nobr>
<img width="10" height="14" style="margin-right:-2px;" border="0"
src="http://l.yimg.com/os/mit/media/m/base/images/transparent-1093278.png"
class="pos_arrow" alt="Up"> <b style="color:#008800;">12.80</b>
<bstyle="color:#008800;"> (3.87%)</b> 68,086,160
是否可以解析已解析文档的结果?我不知道从哪里开始。
答案 0 :(得分:0)
您只需要从您所在的位置继续进行一些XPATH提取工作。有很多种可能性。难点是所有yfnc_tabledata1节点都处于同一级别。以下是如何做到这一点(在控制台应用程序示例中,它将转储符号和公司列表):
HtmlAgilityPack.HtmlDocument page = new HtmlWeb().Load("http://uk.finance.yahoo.com/q/cp?s=%5EFTSE");
// get directly the symbols under the 1st TD element. Recursively search for an A element that has an HREF attribute under this TD.
var symbols = page.DocumentNode.SelectNodes("//td[@class='yfnc_tabledata1']//a[@href]");
foreach (var symbol in symbols)
{
// from the current A element, go up two level and get the next TD element.
var company = symbol.SelectSingleNode("../../following-sibling::td").InnerText.Trim();
Console.WriteLine(symbol.InnerText + ": " + company);
}
有关XPATH轴的更多信息,请访问:XPATH Axes