【问题标题】:Using HTML Agility Packet to get several Tables from a Website and add them to List使用 HTML Agility Packet 从网站获取多个表并将它们添加到列表
【发布时间】:2017-10-04 14:19:23
【问题描述】:

我正在开发一个从网站获取表格信息的小程序,稍后将按日期时间对这些信息进行排序。

我最大的问题是,在我获取网站并将其转换为字符串的函数之后,我找不到将信息放入列表的方法。我不断收到 NullPointer 错误。

我试过了:

WebClient webClient = new WebClient();
string page = webClient.DownloadString("http://www.mufap.com.pk/payout-
report.php?tab=01");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);

List<List<string>> table = 
doc.DocumentNode.SelectSingleNode("//table[@class='1']")
        .Descendants("tr")
        .Skip(1)
        .Where(tr=>tr.Elements("td").Count()>1)
        .Select(tr => tr.Elements("td")
        .Select(td => td.InnerText.Trim()).ToList())
        .ToList();

但由于某种原因,我不断收到此错误:

An unhandled exception of type 'System.NullReferenceException' occurred in WebGetter.exe

我认为这与我选择的类有关,虽然表的类被命名为“1”,所以这应该有正确的参考。当我使用

我不断收到这个:

System.Collections.Generic.List1[System.Collections.Generic.List1[System.String]]

如果你能指出我正确的方向,那就太好了。

【问题讨论】:

  • 忘了说这是我正在使用的链接:athletic.net/TrackAndField/Division/Top.aspx?DivID=81830
  • 在你给定的url中没有1类的表
  • @RubenVardanyan 那么我如何获得第一张桌子呢?我对此很陌生:s
  • 所以你是指你写class=1时的第一个表格元素? @科林

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


【解决方案1】:

如果你需要从 HTML 中选择第一个 Table 元素,你只需要使用 SelectSingleNode 方法。它为您的查询返回第一个节点,您的查询应如下所示

doc.DocumentNode.SelectSingleNode("//table")

在您的代码中,您还将查询添加到class,但不存在值。正如我从上面的 cmets 中了解的那样,您认为 [class='1'] 将返回第一个 Table 元素,这是错误的,它将返回 Table 元素,其 class 属性值为 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多