IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Parser une page HTML pour récupérer certaines données. [WD18]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Parser une page HTML pour récupérer certaines données.
    Bonjour,

    Toujours dans le cadre de mon projet d'application tournant autour du jeu Hearthstone, j'essaie de réaliser un parseur pour importer les decks issus de certains sites.

    Je vous donne ici le code qui devrait me permettre de récupérer les informations adéquates issues d'un deck pris au hasard. Evidemment, mon code ne fonctionne pas et semble déclencher une boucle infinie (et j'ignore pourquoi).

    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
    PROCEDURE Parse_HTML()
     
    sUrl est une chaîne = "http://www.hearthstone-decks.com/deck/voir/sc2wfr-chaman-rang-5-to-legend-6958"
    sDocXML est une chaîne
    nCartes est un entier
    sCarte est une chaîne
    sDeck est une chaîne = ""
    SI HTTPRequête(sUrl) ALORS
    	sDocXML = HTTPDonneRésultat(httpRésultat)
    	SI XMLDocument("DocXML", sDocXML) = Vrai ALORS
    		RequêteXPATH est une chaîne
    		RequêteXPATH = "//entry/a"
    		SI XMLExécuteXPath("DocXML", RequêteXPATH) = Vrai ALORS
    			TANTQUE XMLTrouve("DocXML") ET XMLNomElément("DocXML") = "a"
    				LIB_SansNom1 = "Parcours de " + XMLDonnée("DocXML")
    				SI XMLDonnée("DocXML","nb_card") = "1" OU XMLDonnée("DocXML","nb_card") = "2" ALORS
    					nCartes = XMLDonnée("DocXML","nb_card")
    					sCarte = XMLDonnée("DocXML")
    					sDeck = sDeck + nCartes + "x " + sCarte + RC
    				FIN
    				XMLSuivant("DocXML")
    			FIN
    		SINON
    			Erreur("La requête n'a pas été exécutée.")
    		FIN
    	SINON
    		Erreur("La page n'a pas été convertie en XML.")
    	FIN
    	XMLTermine("DocXML") 
    FIN
    Info(sDeck)
    Pouvez-vous m'aider à voir ce qui cloche ?

    EDIT : apparemment, le document XML ne se crée pas. Pourtant, ça semblait être la bonne méthode mais je suppose que le code HTML est trop complexe pour une conversion en XML simple.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour,

    votre code ne fait pas de boucle infini, c'est juste que Windev met beaucoup de temps à répondre. Ensuite dans sa réponse, vous gérer bien l'échec de la fonction, mais pas le détail technique.
    Déjà pour débugguer : mise en place de point d'arrêt pour suivre ligne à ligne l'algo afin de voir où ça coince : CRTL + B ou ecrire STOP dans l'algo ou raccourci dans l'éditeur de code avec un clic de souris....

    Je rajouterais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ...
    	SI XMLDocument("DocXML", sDocXML) = Vrai ALORS
    		...
    		SI XMLExécuteXPath("DocXML", RequêteXPATH) = Vrai ALORS
    			...
    		SINON
    			Erreur("La requête n'a pas été exécutée." + RC + "Le problème suivant a été détecté : " + ErreurInfo())
    		FIN
    	SINON
    		Erreur("La page n'a pas été convertie en XML." + RC + "Le problème suivant a été détecté : " + ErreurInfo())
    	FIN
    ...
    Ainsi vous aurez vu que l'algo sort faux à la fonction XMLDocument() et grâce à ErreurInfo() vous sauriez pourquoi : "Le document n'est pas au format XML."

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Effectivement, entre deux, j'avais procédé aux mêmes modifications et étais arrivé aux mêmes conclusions.

    Je vais donc passer par des ExtraitChaine...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut
    Bonjour à tous,

    Citation Envoyé par Khyinn Voir le message
    Je vais donc passer par des ExtraitChaine...
    … ou bien tu passes par l'Automation OLE pour analyser le code HTML en utilisant l'ActiveX MSHTML installé avec Windows.

    Tu trouveras un exemple dans cette discussion…
    http://www.developpez.net/forums/d14...table-donnees/


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP] Parser d'une page HTML pour récupération du texte
    Par trihanhcie dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 23
    Dernier message: 18/06/2011, 19h10
  2. CURL et QWebElement pour parser une page HTML
    Par moumous24 dans le forum Qt
    Réponses: 4
    Dernier message: 30/05/2011, 11h45
  3. Réponses: 4
    Dernier message: 06/10/2008, 16h27
  4. Parser une page Html pour récuperer valeur
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 01/12/2006, 17h10
  5. parser une page HTML pour en retirer de l'info
    Par belakhdarbts10 dans le forum ASP
    Réponses: 1
    Dernier message: 29/10/2006, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo