Problèmes de fonction avec Pugixml
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 21 août 2024 à 13:46
- Problèmes de fonction avec Pugixml
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Fonction remplacer word - Guide
3 réponses
19 août 2024 à 17:27
Bonjour,
Si je m'en tiens au message d'erreur, tu tentes de convertir un "const pugi::xpath_node" en "pugi::xml_node".
Premier problème, tu tentes de convertir un objet "const" (objet en lecture seule) en objet "non const" (objet en lecture écriture). Ce n'est pas cohérent, et en admettant que ce le soit (ce qui est peu probable) il faudrait faire un const_cast. Mais vu ce que tu veux faire, il faudrait simplement que le type de ton objet soit const.
Second problème, le type n'est pas le même. Il faudrait se demander si un tel cast est légitime et si on a de bonne raison de le faire, et si c'est le cas il faudrait sans doute plutôt faire un dynamic_cast. Ce cast ne semble pas légitime, car le type cible n'hérite pas du type source d'après ce que je vois ici.
Donc ta boucle devrait plus logiquement s'écrire :
for (const pugi::xpath_node & playerNode : doc.select_nodes("//div[contains(@class, 'personCardCell__description')]")) { ... }
... ou si tu utilises un compilateur C++ moderne :
for (const auto & playerNode : doc.select_nodes("//div[contains(@class, 'personCardCell__description')]")) { ... }
Les erreurs suivantes indiquent que l'objet xml_node n'a pas de méthode node.
Plusieurs questions :
- T'es tu basé sur un tutoriel ? Si oui lequel ? Et sinon, as-tu essayé d'en chercher un ?
- Utilises-tu un IDE (qui pourrait t'aider à voir quand tu commets des erreurs de développement) ?
- As-tu un besoin technique qui justifie d'écrire ton programme en C++ ? Souvent pour faire du scraping, on utilise des langages moins performants mais plus pratique tel que python ?
Bonne chance
21 août 2024 à 12:18
Bonjour Mamiemando,
Je te remercie pour ta réponse.
Je m'aide de ChatGPT pour coder les fonctions complexes.
J'utilise Visual Studio qui possède un assistant mais sur certaines erreurs, il reste assez vague...
J'ai codé un algorithme en c++ donc je pensais que ce serait plus simple d'avoir le scraping en c++.
Merci encore
21 août 2024 à 13:46
Bonjour Pierre,
C++ or not C++ ? Effectivement si tu as commencé en C++, il est plus naturel de continuer en C++... sous réserve que le scraping s'intègre dans ce programme. Je ne sais pas à quel point tu es à l'aise en programmation, en C++, et quel est le but final de ton programme, mais si tu es néophyte, je ne recommande pas forcément de démarrer par du C++.
ChatGPT or not ChatGPT ? Je te déconseille de coder avec ChatGPT. À chaque fois que je vois des gens poser des questions sur le forum lié à du code produit par ChatGPT, le code qu'ils proposent (ou plutôt que ChatGPT leur propose) est catastrophique. Il vaut mieux apprendre le langage et/ou les librairies dont tu as besoin. En outre, ChatGPT va choisir une solution technique qui n'est pas forcément la meilleure selon tes besoins (voir ce lien pour voir un état de l'art des librairies pour parser du XML en C++), et probablement générer du code faux/mort/overkill.
Scraping or not scraping ? Ensuite, il faut voir quel site tu cherches à scraper. En effet, parser du contenu XML présuppose que l'architecture de la page web traitée ne changera pas significativement. Au contraire, si le site le propose, une API est supposée être stable permet de directement récupérer la donnée (par la suite mise en forme par le site). Du coup se pose les questions suivantes :
- Avec quel site travailles-tu ?
- Propose-t'il une API ?
- Quelle donnée souhaites-tu extraire ?
En admettant que toutes ces questions te maintiennent dans le choix de pugixml, il faut idéalement s'entraîner sur un exemple, ou si tu es déjà l'aise avec la librairie, repartir d'un extrait de code fiable (par exemple une réponse fournie dans la documentation ou sur un forum spécialisé, par exemple stackoverflow) et broder autour de cet exemple. Dans ton cas, repartir de cette section de la documentation est sans doute un bon début.
Enfin, en programmation (et en particulier C++), c'est une mauvaise idée de vouloir tout coder d'un coup, il vaut mieux ajouter progressivement du code et vérifier les ajouts, puis itérer jusqu'à atteindre le but souhaiter.
- As-tu compris grâce à mon message précédent, les erreurs de compilations que tu avais ?
- Es-tu parvenu à les corriger (par exemple, en adaptant les exemples donnés dans la documentation) ?
Bonne chance