2017-05-06 1 views
0

Je travaille sur un petit programme qui obtient des informations de table à partir d'un site Web et triera plus tard ces informations par DateTime.Utilisation du paquet d'agilité HTML pour obtenir plusieurs tables d'un site Web et les ajouter à la liste

Mon plus gros problème est qu'après ma fonction qui obtient le site Web et en fait une chaîne, je ne trouve pas un moyen d'obtenir l'information dans une liste. Je continue d'obtenir des erreurs NullPointer.

J'ai essayé ceci:

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(); 

Mais pour une raison que je continue à obtenir cette erreur:

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

Je pense que cela a à voir avec la classe je choisissais, bien que la classe de la table est nommé "1", donc cela devrait avoir la bonne référence. Lorsque j'utilise le

Je continue à obtenir ceci:

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

Si vous pouvez me diriger dans la bonne direction, ce serait bien.

+0

oublié de mentionner que c'est le lien que j'utilise: https://www.athletic.net/TrackAndField/Division/Top.aspx?DivID=81830 –

+0

Il n'y a pas de table avec la classe '1' dans votre URL –

+0

@RubenVardanyan Alors comment puis-je obtenir la première table là ? Je suis assez nouveau à ceci: s –

Répondre

0

Si vous devez sélectionner le premier élément Table du code HTML, il vous suffit d'utiliser la méthode SelectSingleNode. Il renvoie le premier nœud de votre requête, et votre requête devrait ressembler à ceci

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

Dans votre code vous ajoutez requête également class avec pas de valeur existante. Si je comprends bien former vos commentaires ci-dessus, vous pensiez que [class='1'] retournera le premier élément Table, ce qui est faux, il retournera élément Table qui est class valeur d'attribut est 1