如何从网站获得表格的所有价值

时间:2017-03-30 09:08:31

标签: c# html-agility-pack

string Url = "http://www.dsebd.org/latest_share_price_scroll_l.php";
HtmlWeb web = new HtmlWeb();

HtmlDocument doc = web.Load(Url);
string a = doc.DocumentNode.SelectNodes("//iframe*[@src=latest_share_price_all\"]//html/body/div/table/tbody")[0].InnerText;

我试过了,但在字符串a中找到了null值。

1 个答案:

答案 0 :(得分:0)

好的,这个让我困惑了一段时间,但我现在已经知道了。您可以从http://www.dsebd.org/latest_share_price_scroll_l.php获取表格数据,而不是从http://www.dsebd.org/latest_share_price_all.php拉出整个页面。

尝试在iframe元素下选择#document节点的子元素时有一些奇怪的行为。具有更多xpath经验的人可能能够解释这一点。

现在,您可以使用以下xpath获取所有表行节点:

string url = "http://www.dsebd.org/latest_share_price_all.php";

HtmlDocument doc = new HtmlWeb().Load(url);
HtmlNode docNode = doc.DocumentNode;

var nodes = docNode.SelectNodes("//body/div/table/tr");

这将为您提供所有表行节点。然后,您需要遍历您刚刚获得的每个节点并获得所需的值。

例如,如果您想获得交易代码,高价和交易量,您可以执行以下操作:

//Remove the first node because it is the header row at the top of the table
nodes.RemoveAt(0);
foreach(HtmlNode rowNode in nodes)
{
    HtmlNode tradingCodeNode = rowNode.SelectSingleNode("td[2]/a");
    string tradingCode = tradingCodeNode.InnerText;

    HtmlNode highNode = rowNode.SelectSingleNode("td[4]");
    string highValue = highNode.InnerText;

    HtmlNode volumeNode = rowNode.SelectSingleNode("td[11]");
    string volumeValue = volumeNode.InnerText;

    //Do whatever you want with the values here
    //Put them in a class or add them to a list
}

XPath使用从1开始的索引,因此当您按行编号引用表中的特定单元格时,第一个元素位于索引1处,而不是像C#数组中那样使用索引0。