Bonjour,
S.V.P est ce que vous une idée comment je peut récupérer le contenu d'un tableau html avec Html Agility Pack et C#.
Merci pour votre aide.
Version imprimable
Bonjour,
S.V.P est ce que vous une idée comment je peut récupérer le contenu d'un tableau html avec Html Agility Pack et C#.
Merci pour votre aide.
Sans avoir plus de détails, c'est difficile de te donner une réponse précise... Il faudrait connaitre la structure de la page où tu veux récupérer ce tableau. Est-ce que c'est le seul tableau, ou est-ce qu'il y en a plusieurs ? Est-ce que le tableau a une caractéristique qui permet de le retrouver facilement (attribut id ou class par exemple) ?
merci pour votre aide, il existe un seul tableau dans la page ci dessous un exemple de tableau.
Merci.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <table border="1" cellspacing="0" cellpadding="2" bordercolor= "#808080" width="652"> <tr> <td> <p align="justify"> <b>DECLARANT </b>:<br /> <br /> Personne physique liée à Louis PETIET, Administrateur</p> </td> </tr> <tr> <td> <p><br /> <b>INSTRUMENT FINANCIER</b> : Actions<br /> </p> </td> </tr> </table>
Pour récupérer le tableau, tu peux faire quelque chose comme ça :
Une fois que tu as le tableau, tu peux parcourir chaque cellule de chaque ligne :Code:
1
2
3
4
5
6
7 WebClient wc = new WebClient(); HtmlDocument doc = new HtmlDocument(); using (Stream stream = wc.OpenRead(url)) { doc.Load(stream); } HtmlNode table = doc.DocumentNode.Descendants("table").First();
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 // Lignes var rows = table.Elements("tr"); foreach (var row in rows) { // Cellules var cells = row.Elements("td"); foreach (var cell in cells) { // Texte d'une cellule string text = cell.InnerText; ... } }
Salut,
Petite correction :
Code:HtmlNode table = doc.DocumentNode.Descendants("table").First();
Bonjour,
merci pour pour vos réponse mais SVP une autre question si je vais utiliser le xpath ou je doit le remplacer le xpath dans le bous du code ci dessous? et ce que je doit mettre le xpath du tableau et du tr , td ?
Merci
Voici deux exemples utilisant XPath pour directement récupérer toutes les cellules.
Mais pour l'anecdote, simplement spécifier "table" c'était déjà utiliser XPath.Code:
1
2 var cells = doc.DocumentNode.SelectNodes("//table/tr/td"); var cells = doc.DocumentNode.SelectNodes("//td");
PS : Le W3C a un super tuto très court en ligne pour XPath, ça se trouve vite avec Google.
Je suppose que tu parles plutôt de W3Schools ;)
http://www.w3schools.com/xpath/
bonjour,
merci pour vos réponse, je viens d’écrire ce bous de code et j'ai mis le chemin de xpath de mon tableau mais j'ai toujours le problème ce messageCitation:
NullReferenceException was unhandlled
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 HtmlAgilityPack.HtmlWeb web = new HtmlWeb(); HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.amf-france.org/inetbdif/viewdoc/affiche.aspx?id=72670&txtsch="); foreach (HtmlNode table in doc.DocumentNode.SelectNodes("/html/body/table[2]")) { Console.WriteLine("Found: " + table.Id); foreach (HtmlNode row in table.SelectNodes("tr")) { Console.WriteLine("row"); foreach (HtmlNode cell in row.SelectNodes("th|td")) { Console.WriteLine("cell: " + cell.InnerText) ; } } } System.Console.ReadKey();
Merci pour votre aide
C'est parce que ta requête XPath ne renvoie rien...
D'ailleurs, la page que tu récupères utilise des frames (visiblement l'AMF vit encore dans les années 90 :roll:), donc les données que tu cherches ne sont pas directement à cette URL. Il faut récupérer l'URL de la frame qui t'intéresse, et la charger dans un autre HtmlDocument.
D'autre part, pour récupérer la table, tu devrais utiliser SelectSingleNode et non SelectNodes, puisque tu ne cherches qu'un seul élément
Voilà une version modifiée de ton code qui fonctionne :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 var web = new HtmlWeb(); var doc = web.Load("http://www.amf-france.org/inetbdif/viewdoc/affiche.aspx?id=72670&txtsch="); var frame = doc.DocumentNode.SelectSingleNode("/html/frameset/frame[@id='viewdoc']"); string newUrl = frame.Attributes["src"].Value; doc = web.Load(newUrl); var table = doc.DocumentNode.SelectSingleNode("/html/body/table[2]"); Console.WriteLine("Found: " + table.Id); foreach (HtmlNode row in table.SelectNodes("tr")) { Console.WriteLine("row"); foreach (HtmlNode cell in row.SelectNodes("th|td")) { Console.WriteLine("cell: " + cell.InnerText); } } Console.ReadKey();