[VBA Excel] Décodage page web
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

[VBA Excel] Décodage page web



  1. #1
    NicoEnac

    [VBA Excel] Décodage page web


    ------

    Bonjour à tous,

    Pour vous situer mon niveau, je suis autodidacte en VBA Excel et j'ai commencé il y a un an environ.

    J'essaie actuellement de développer un petit utilitaire qui génère un tableau mais qui doit manipuler internet pour cela. En gros, dans la première colonne se trouvent toute une série de liens hypertextes vers des @ Internet.

    Mon but est d'ouvrir ces @ une par une et d'extraire de la page ouverte uniquement certaines données afin de construire mon tableau.

    Créer la fenêtre internet, entrer l'@ et attendre le chargement de la page, OK je sais faire. Là où ça coince, c'est dans le "décodage" de la page : d'habitude, j'enregistre la page en local puis l'ouvre avec un éditeur de texte, je recherche les balises puis avec getElementsByTagName ou getElementsByName je m'en sors.

    Cependant, lorsque j'ouvre avec mon cher éditeur texte cette page d'apparence très simple (du texte, du texte et quelques liens), je tombe sur 10 lignes maxi sans retrouver toutes les données présentes dans la page. Voici le fichier complet

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
    <!-- saved from url=(0173)http://XX.XX.X.XXX:XXXX/XXXXX -->
    <!-- Template Loading Information
     --><HTML><HEAD><TITLE>gtabcdef (User): ABCDE_fgh</TITLE>
    <META content="text/html; charset=windows-1252" http-equiv=Content-Type>
    <SCRIPT language=JavaScript1.1>
    
    		// Give focus to this window
    		window.focus();
    
    	</SCRIPT>
    
    <META name=GENERATOR content="MSHTML 8.00.6001.18904"></HEAD><FRAMESET 
    frameSpacing=0 border=0 rows=40,*,40><FRAME noResize marginHeight=0 
    src="gtabcdef%20(User)%20ABCDE_FGH_fichiers/PTwebCA0GEPNN.htm" frameBorder=0 
    name=subbuttonbar marginWidth=10 scrolling=no><FRAME noResize marginHeight=10 
    src="gtabcdef%20(User)%20ABCDE_FGH_fichiers/PTwebCAYA3OH3.htm" frameBorder=0 
    name=workspace marginWidth=10><FRAME noResize marginHeight=2 
    src="gtabcdef%20(User)%20ABCDE_FGH_fichiers/PTwebCABRAJ3M.htm" frameBorder=0 
    name=pt_status marginWidth=10 scrolling=no></FRAMESET></HTML>
    D'où mes questions : comment puis-je faire ? Quelqu'un pourrait-il expliquer au moins comment fonctionnent ces pages ? Sont-ce des scripts qui tournent derrière pour afficher ce qu'Excel ne peut voir ?

    Bref, je suis dans le noir total et je vous serais reconnaissant si quelqu'un pouvait au moins craquer une allumette.

    -----
    Dernière modification par yoda1234 ; 06/08/2010 à 17h31.
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  2. #2
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Re,

    Personne ne maitrise le VBA ?
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  3. #3
    ProgVal

    Re : [VBA Excel] Décodage page web

    Bonjour,

    Tu n'as pas choisi le plus facile. Cette page est un Frameset, qui est un ensemble de frames. Une frame, c'est quand tu prends tout le contenu d'une autre page, et que tu le mets dans la première page.
    Personnellement, je vois mal comment on fait une page plus sale que ça... Ah si, je vois, avec un générateur de pages (technologie d'ailleurs également utilisée ici)

    En l'occurence, il y a trois pages qui sont incorporées :
    gtabcdef%20(User)%20ABCDE _FGH_fichiers/PTwebCA0GEPNN.htm
    gtabcdef%20(User)%20ABCDE _FGH_fichiers/PTwebCAYA3OH3.htm
    gtabcdef%20(User)%20ABCDE _FGH_fichiers/PTwebCABRAJ3M.htm

    Cordialement,
    ProgVal

  4. #4
    fouga

    Re : [VBA Excel] Décodage page web

    Bonjour,

    c'est un projet intéressant que t'as là, je connais quelqu'un qui faisait aussi de l'analyse de pages web, pour gagner en bourse en scannant les cours. ça marchait pas mal mais lui Excel saturait au bout d'une semaine, on sait pas pourquoi...

    Pour ton problème, comme il a été dit par ProgVal c'est une histoire de structure de pages et donc plus un problème d'analyse web.

    Tu peux jeter un oeil sur ce lien pour la technologie des frames:
    http://www.commentcamarche.net/conte...tmlframes.php3

    Elle est encore utilisée de manière minoritaire mais je la trouve personnellement archaïque par rapport à ce qu'on fait en CSS actuellement.
    ça fait très longtemps que j'ai pas fait de sites en utilisant les frames, mais pour faire simple, pour ton problème, il va falloir décomposer la page finale en ses différentes frames (ici il y en a 3).
    Pour cela, tu peux extraite le lien indiqué après src= dans chaque balise frame et l'ouvrir dans une nouvelle page/fichier.
    C'est cette page (ou ces pages ici) qui contiendra le contenu dont tu veux te servir pour faire ton tableau.

    Bon courage!

  5. A voir en vidéo sur Futura
  6. #5
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Merci beaucoup pour ces réponses ProgVal et fouga, je commençais réellement à désespérer. Je vous tiens au courant sur mon avancement.
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  7. #6
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Et bien merci beaucoup, ma macro fonctionne nickel !

    Mon chef vous remercie également
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  8. #7
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Re,

    Je déterre ce fil car le sujet est similaire.

    Je cherche à faire une macro toute bête qui, à partir de données d'une feuille excel, se connecte à GoogleMaps, clique sur le bouton "Itinéraire", remplit les champs "A" (adresse de départ) et "B" (adresse d'arrivée) puis clique sur le bouton "submit".

    Tout ça c'est bon, c'est assez facile.

    Par contre, j'aimerais récupérer le nombre de kilomètres du trajet et là ça se corse... En effet, comme toujours j'enregistre ma page Web et fait une recherche du texte (pour récupérer les noms des balises) que je recherche et là...rien du tout ! Pas la moindre trace du texte.

    Alors je suppose que la page elle-même ne contient pas les infos mais que ce sont des javascripts qui affectent ces valeurs dans des variables locales à la page et dont les valeurs ne sont pas dans la page telle que je l'enregistre.

    Suis-je clair ? Pouvez-vous m'aider svp ?
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  9. #8
    Philou67

    Re : [VBA Excel] Décodage page web

    Le contenu des informations est inséré dans un <iframe> contenu dans la page retournée par google :
    Exemple que je viens de faire :
    Code HTML:
    <iframe src="/mapfiles/home3.html" name="vp" id="vp" class="offscreen"></iframe>
    Je suppose que l'URL est variable, tu dois donc trouver l'attribut src d'une balise iframe dont l'attribut name est vp (ou l'id au choix).

    Mais c'est assez coton pour les extraire. Exemple perdu au milieu d'un code indéchiffrable ou presque (une entité CDATA) :
    Code HTML:
    distance:"951 km",time:"8 heures 53 minutes",summary:"A31 et A7",warning:[{text:"Ce trajet emprunte des autoroutes."}],distance_classification:{local_road_distance_meters:19760.506,highway_distance_meters:931018.88}},{routes:[{vias:[{query:"",is_via:true,latlng:{lat:47.135797799999999,lng:5.4657676999999998},geocode:"FTU8zwIdp2ZTACnhpFlVzrLyRzHg2mbANM4JEw"}]}],distance:"995 km",time:"9 heures 17 minutes",summary:"A7",distance_classification:{local_road_distance_meters:20163.908,highway_distance_meters:974528.06}},{routes:[{vias:[{query:"",is_via:true,latlng:{lat:45.842228200000001,lng:9.0180842999999999},geocode:"FTR_uwId5JqJACn9YzmMsYKGRzEQsMum653pqg"}]}],distance:"929 km",time:"9 heures 38 minutes",summary:"A2",distance_classification:{local_road_distance_meters:6499.3804,highway_distance_meters:922454.38}}],waypoints:[{query:"mackwiller",status:1,geocode:"FfaN6gIdYHptACnL6E_3ETuURzGwUTmauV8KBA"}
    Edit : sous Firefox, pour enregistrer la totalité des informations d'une page, y compris les pages liées, il faut faire "Enregistrer-sous" et choisir "Page web complète"
    :'( Plus j'apprends, et plus je mesure mon ignorance

  10. #9
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Citation Envoyé par Philou67 Voir le message
    Edit : sous Firefox, pour enregistrer la totalité des informations d'une page, y compris les pages liées, il faut faire "Enregistrer-sous" et choisir "Page web complète"
    Sous IE également. On obtient un fichier "*.htm" ainsi qu'un dossier contenant tout ce qu'il faut.

    Pour ce qui est de l'IFRAME, je l'ai trouvée. Il y a bien un attribut src ("Waterford,%20Co_%20Comté%20d e%20Waterford,%20Irlande%20à%2 0Youghal,%20Co_%20Cork,%20Irla nde%20-%20Google%20Maps_fichiers/maps.htm") mais que dois-je en faire pour accéder à CDATA ? D'ailleurs qu'est ce que CDATA ? Une variable ? Une balise ? Je m'y perds un peu...
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  11. #10
    Philou67

    Re : [VBA Excel] Décodage page web

    Le CDATA est une séquence d'échappement dans un document XML, donc en gros, ce n'est pas du XML, et le format à l'intérieur peut être quelconque (ici, sans doute, propriétaire).

    Je ne sais pas s'il y a des moyens de récupérer son contenu depuis Excel/VBA, désolé. Utilises-tu une API XML pour analyser le fichier .htm ? Pourrais-tu simplement utiliser une recherche textuelle à la place ? (chercher les distances=... à l'aide d'une expression régulière par exemple).
    :'( Plus j'apprends, et plus je mesure mon ignorance

  12. #11
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Je ne connais pas les API XML.

    Je suis autodidacte en VBA donc je ne connais pas les termes techniques mais en gros, pour décoder une page internet, je l'enregistre, je l'ouvre sous format texte, je cherche les balises ayant le contenu qui m'intéresse et j'y accède à l'aide de : IE.document.getelementsbyname( "id_balise_qui_m_intéresse ") ou getelementsbytagname (IE étant mon objet InternetExplorer).
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  13. #12
    Philou67

    Re : [VBA Excel] Décodage page web

    getelementsbyname fait bien partie de l'API XML et tu ne trouveras pas l'entité CDATA avec.
    Il existe peut-être d'autres fonctions de l'API pour trouver les CDATA...

    Sinon, il faudrait que tu utilises d'autres fonctions VBA pour analyser ton fichier, comme des fonctions de recherche de texte, ou de recherche de motif (pattern) avec des expressions régulières. Je ne connais pas VBA, mais ça doit se trouver. Voir ici : http://www.vbfrance.com/tutoriaux/EX...IERES_520.aspx

    Avec une regexp, tu peux capturer des portions de motif comme avec
    /distance=([0-9]+)/
    Dernière modification par Philou67 ; 19/11/2010 à 10h46.
    :'( Plus j'apprends, et plus je mesure mon ignorance

  14. #13
    NicoEnac

    Re : [VBA Excel] Décodage page web

    Désolé d'insister (même si vous m'avez déjà bien aidé) mais il y a quelque chose que je ne comprends pas : si Internet Explorer affiche quelque chose (en l'occurrence l'itinéraire), c'est que ce doit être compris dans mon objet IE que je manipule. Je ne vois vraiment pas pourquoi je n'arrive pas à le trouver...
    "Quand les gens sont de mon avis, il me semble que je dois avoir tort."O.Wilde

  15. #14
    Philou67

    Re : [VBA Excel] Décodage page web

    Si les données CDATA ne sont pas modélisées dans les objets IE, il n'y a aucune chance pour que tu les y trouve. Je ne connais pas l'API que tu utilises, et donc, je ne sais pas si la construction de cet objet permet de conserver ces données CDATA, et d'y accéder par une méthode.

    En revanche, lire le fichier sous forme d'un objet "texte" simple te permettra d'y accéder.
    :'( Plus j'apprends, et plus je mesure mon ignorance

  16. #15
    Stan_94

    Re : [VBA Excel] Décodage page web

    Bonjour,
    je n'ai pas trop le temps de me pencher sur le sujet, donc je vais peut-être écrire une ânerie... mais bon... Je me lance quand même.
    Pour ramener le kilométrage entre 2 adreeses, plutôt que de passer par une page web, pourquoi ne pas utiliser directement les API fournient par Google ?

  17. #16
    Philou67

    Re : [VBA Excel] Décodage page web

    Sont-elles accessibles directement depuis Excel ?
    :'( Plus j'apprends, et plus je mesure mon ignorance

  18. #17
    Stan_94

    Re : [VBA Excel] Décodage page web

    J'avoue ne pas en être sur. Mais j'ai vu sur le net une feuille Excel affichant une carte Google map, c'est donc qu'il doit être possible d'appeler des fonctions javascript depuis VBA... Si je trouve du temps (Ca manque pas mal en ce moment...) je creuserai le sujet !

Discussions similaires

  1. Vba excel
    Par pyrosigma dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/06/2010, 11h44
  2. vba excel
    Par amino18 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 20/12/2009, 15h55
  3. excel vba
    Par invitea97b4264 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 02/05/2009, 11h15
  4. Re : page web + page de demarrage intempestives + problems
    Par invite0f281810 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 13
    Dernier message: 25/03/2004, 19h01
  5. Impression excel / vba
    Par invite83451e7e dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/03/2004, 09h10
Découvrez nos comparatifs produits sur l'informatique et les technologies.