2017-05-06 23 views
0

我正在从一个网站获取表信息的小程序,稍后将按DateTime对这些信息进行排序。使用HTML敏捷包从网站获取多个表并将它们添加到列表

我最大的问题是,我的函数获取网站并将其变成一个字符串后,我找不到一种方法将信息获取到列表中。我不断收到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]]

如果你可以点我到正确的方向,这将是很好的。

+0

忘了提,这是我使用的链接: https://www.athletic.net/TrackAndField/Division/Top.aspx?DivID=81830 –

+0

在给定的网址中没有任何含'1'类的表 –

+0

@RubenVardanyan那么我该如何获得第一个表?我对此很新颖:s –

回答

0

如果您需要从HTML中选择第一个Table元素,您只需使用SelectSingleNode方法即可。它返回的第一个节点为您查询,您的查询应该是这样的

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

在你的代码也添加查询class与不存在的价值。据我了解,形成上述您的意见,您认为[class='1']将返回第一个Table元素,这是错误的,它会返回Table元件,它是class属性值是1