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

VB 6 et antérieur Discussion :

Reccupérer des données sur une page Internet


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut Reccupérer des données sur une page Internet
    Bonjour à tous.
    Voila, je fais un programme qui doit parcourir une page web et reccupérer des données qui sont dessus. J'utilise un Webbrowser pour afficher ma page. Dans un précédent post on m'avait donné un code permettant de trouver les boites texte permettant d'entrer ... du texte bien sûr. Ce code utilisait la fonction getElementsByTagName. Je l'ai essayé avec le paramètre "*", ait parcourus les 1840 élément présent sur la page (y ma fallut un moment) mais je n'ai pas eu les données voulues
    Pour information voici un exemple de page sur laquelle je doit lire les données, vous devinerez quelles sont les données que je veux reccupérer
    http://www.coteur.com/st-etienne-mar...-rid68180.html
    Si quelqu'un à une piste, un code ou quelque chose, merci d'avance

  2. #2
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut

    j'avais mal chercher, désolé, la réponse se trouve ici :
    http://www.developpez.net/forums/sho...d.php?t=287986


    J'ai quand même un problème, dans mon cas, les trois valeurs par bookmaker sont collées les une aux autres, pas facile de les séparer, même si on peut dire que chaque nombre à deux chiffres après la virgule, je compte utiliser mon programme sur d'autre sites où ils ne s'arrêtent pas forcément à 2 chiffres (et oui j'ai vu un 2.875).
    Merci

  3. #3
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Peut être recuperer la page avec Doc.body.innerHTML plutôt qu'avec Doc.body.innerText
    la recuperation est equivalante à "afficher la source" de l'explorateur IE.
    En recherchant les balises HTML encadrant les données à recuperer cela est devenu possible, le probléme est que si la structure de la page évolue et/ou les différents sites n'auront assurémént pas la même structure, là ....... dur dur.
    Faire un essais avec un 2° RichTextBox, modifier, completer comme cela,
    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
    Public Sub Recuperation()
    Set Doc = Nothing
    Set IE = New InternetExplorer
    IE.navigate "http://www.coteur.com/st-etienne-marseille-rid68180.html"
    'IE.Visible = True 'pour debug
    Do While IE.readyState <> READYSTATE_COMPLETE
     DoEvents
     Label1 = IE.StatusText
    Loop
    Set Doc = IE.document
    LeTexte = Doc.body.innerText
    RichTextBox1.TextRTF = ""
    RichTextBox1.Font = "courier new": RichTextBox1.Font.Size = 10
    RichTextBox1.SelText = LeTexte
     
    LeTexte = Doc.body.innerHTML
    RichTextBox2.TextRTF = ""
    RichTextBox2.Font = "courier new": RichTextBox2.Font.Size = 10
    RichTextBox2.SelText = LeTexte
    Doc.Close: DoEvents
    IE.Quit: DoEvents
    End Sub
    Pour le site donné en exemple,
    retrouver 2.80 dans "class="Style7">2.80</div></td><td"
    si "InterPari", "Betandwin", "Unibet", ...... sont toujours present, ce caller
    Position = InStr(1, LeTexte, "InterPari")
    puis rechercher la balise "Style7" suivant cette position
    Position = InStr(Position, LeTexte, "Style7")
    rechercher les balises "</div></td>", ajouter 8, Position= Position + 8, puis trouver ou se termine la donné a recuperer
    PositionFin = InStr(Position, LeTexte, "</div></td>")
    dans Mid$(LeTexte, Position, PositionFin - Position) sera bien contenu les 2.80 voulue.
    En mettant sa dans une boucle, sa doit être faisable.

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Utilise plutôt une récupération cellule à cellule en faisant attention
    à bien utiliser une table «finale» ; celles-ci étant souvent imbriquées.

    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
     
        Set IEdoc = IE.Document
        Set IETabs = IEdoc.getElementsByTagName("table")
     
        For x = 0 To IETabs.length - 1
        Set IEtab = IETabs(x)
     
        If IEtab.getElementsByTagName("table").length = 0 Then
            Debug.Print "Contenu de la table : " & x & vbCrLf
            For Each r In IEtab.rows
                For Each c In r.cells
                    Debug.Print c.innerText
                Next
            Next
     
            Debug.Print " ========================== " & vbCrLf
        End If
        Next

  5. #5
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Merci DarkVader je regarde ca
    ProgElect, j'ai regardé et en effet cela me parait mieux que InnerText. Je regarde si la solution de DarkVader fonctionne, si ce n'est pas le cas je me penche un peu mieux sur la tienne.
    Merci à vous deux

  6. #6
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Bon j'ai as mal travaillé dessus, j'ai utilisé le code de DarkVader, par contre dans ton code tu met une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IEtab.getElementsByTagName("table").length = 0 Then
    Or il se trouve que les données que je souhaite sont justement dans un tableau, donc avec ton code, j'avais toute la page sauf les données souhaitées.
    Mais bon, j'ai fini par réussir à isoler les données, j'ai plus qu'a les traiter.
    Merci beaucoup à vous deux

  7. #7
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Petit problème encore, pourrais-tu me donner les déclarations des variables r et c car je ne trouve pas je les ais déclarée en variant mais ce n'est pas très propre.
    Merci

  8. #8
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    1°)
    Citation Envoyé par avigeilpro
    Bon j'ai as mal travaillé dessus, j'ai utilisé le code de DarkVader, par contre dans ton code tu met une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If IEtab.getElementsByTagName("table").length = 0 Then
    Or il se trouve que les données que je souhaite sont justement dans un tableau, donc avec ton code, j'avais toute la page sauf les données souhaitées.
    Non, avec ce code tu as le traitement de chaque table l'une après l'autre -
    la condition à laquelle tu fais référence permet seulement de passer sur les tables servant de «container»
    et ne traiter que les tables en fin d'imbriquement.
    Tu remarqueras que de ce fait n'ont été traitées que les tables :
    2, 5, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 42, 43, 45, 47, 49, 51, 52, 53, 54
    Les tables container 0, 1, 3, 4, 6, 7, 9, 12, 25, 29, 35, 41, 44, 46, 48, 50 étant passées à la trappe.

    2°)
    Citation Envoyé par avigeilpro
    Petit problème encore, pourrais-tu me donner les déclarations des variables r et c car je ne trouve pas je les ais déclarée en variant mais ce n'est pas très propre.
    Merci
    Plutôt que des variants, des «object» serait plus appropriés 8)
    IeTab : HTMLTable
    r : HTMLTableRow
    c : HTMLTableCell

    Evidemment, penser à ajouter la référence à "Microsoft HTML Object Librairy" qui s'occupe de gérer les objects DOM

  9. #9
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    J'ai fini mon code, mais il a fallut que j'enlève la référence, je regarde plus tard pour la déclaration Merci

Discussions similaires

  1. Envoyer des données sur une page HTML à partir de Delphi
    Par gillou026 dans le forum Débuter
    Réponses: 18
    Dernier message: 29/05/2013, 01h16
  2. [XL-2003] Récupérer des données d'une page internet avec login
    Par yoyo_l dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/08/2009, 22h58
  3. Affichage des données sur une page jsp
    Par khaoula_14_05 dans le forum Struts 1
    Réponses: 2
    Dernier message: 15/10/2008, 09h51
  4. [WD11] extraire des données d une page internet
    Par cdevl32 dans le forum WinDev
    Réponses: 2
    Dernier message: 24/08/2007, 20h23
  5. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22

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