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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 c# : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 messageNullReferenceException was unhandlled
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ), 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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();
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager