Créer une base de donnée en important des données du web (balise td - tr)

Bonjour, je suis nouveau sur ce forum ou j'ai découvert plusieurs sujet (souvent très ancien) répondant partiellement à mon besoin.

En effet, je souhaite récupérer des données du web (site: Résultats des courses - France à vélo (ffc.fr)) à partir d'une liste d'URL déja extraite de ce site.

Mes URL (en colonne D) sont accompagnées d'autres infos (col A à C et E à G) que je souhaiterait recopier pour chaque ligne du tableau que je veux extraire sur une autre feuille les unes sous les autres.

Feuille source :

ROUTERégionalU15, U17URL 107 janvier 2024OUVERTURE SAISON ROUTE 2024Martinique
ROUTERégionalU15, U17URL 214 janvier 2024GRAND PRIX GERARD GOLD DALGMartinique
ROUTERégionalU17URL 301 octobre 2023ESPALAIS U17Lot-et-Garonne

Quelqu'un peut-il m'aider?

Cordialement,

ERIC

Bonjour

Il faudrait donner une URL

.fr

Bonjour

Une proposition PowerQuery (intégré à Excel)

Tu peux ajouter des URL et actualiser.

3url-velo.xlsx (21.54 Ko)

Bizarrement sur le 1er URL il y a 2 tableaux alors qu'on n'en visualise qu'un quand on consulte la page

Merci Chris,

Je ne connais pas du tout le maniement de PowerQuery, ça semble redoutablement efficace!

Je vais regarder cette proposition de très près

Chris,

J'ai un peu de mal à me familiarisé avec PowerQuery....

Pouvez-vous m'indiquer les étapes à suivre pour obtenir le résultat que vous me proposez?

Elb

Bonjour

pourrait on avoir une url complète formée avec les données d'une ligne ?

re

va dans la feuille requetes et click sur GO

Bonjour

pourrait on avoir une url complète formée avec les données d'une ligne ?

Pas compris

La macro GO plante chez moi (incompatibilité de type)

re

sur quelle ligne elle plante!!????

il faut faire plus d'éfforts dans vos réponses

que l'on soit pas obligé de vous sortir les vers du nez

RE

Re

bon il faudra peut etre enlever le prefetch navigateur dans la requete
il est utile quand on fait la requete sur la même url x fois régulièrement

donc

Option Explicit
Sub CLEARALL()
    Range("F:M").ClearContents
End Sub
Function GetCodeHtmlVpat(UrL)
    Dim req As Object
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "GET", UrL, False
    req.setrequestheader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
    req.setrequestheader "Accept-Encoding", "gzip , deflate, br"
    req.setrequestheader "Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"
    req.setrequestheader "Connection", "keep-alive"
    req.setrequestheader "Host", "velo.ffc.FR"
    req.setrequestheader "User -Agent", "Mozilla/5.0 (Win"

    'req.setrequestheader "Sec-Fetch-Dest", "document"
    'req.setrequestheader "Sec-Fetch-Mode", "navigate"
    'req.setrequestheader "Sec-Fetch-site", "none"
    'req.setrequestheader "Sec-Fetch-User", "1"
    'req.setrequestheader "Upgrade-Insecure-Requests", "1"

    req.send
    GetCodeHtmlVpat = req.responsetext

End Function

Sub test()
    Dim Lig&, UrL$, tabl, trs, i&, c&, tablo, CeL
    CLEARALL
    For Lig = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        UrL = Range("A" & Lig).Value
        With CreateObject("htmlfile")
            .body.innerHtml = GetCodeHtmlVpat(UrL)
              Set tabl = .getelementsbytagname("table")(0)
            Set trs = tabl.getelementsbytagname("TR")
            ReDim tablo(1 To trs.Length, 1 To trs(0).Children.Length)
            For i = 0 To trs.Length - 1
                For c = 0 To trs(i).Children.Length - 1
                    tablo(i + 1, c + 1) = Replace(trs(i).Children(c).innertext, Chr(10), " ")
                Next
            Next
        End With
        Set CeL = Cells(Rows.Count, "G").End(xlUp).Offset(2)
        CeL.Offset(, -1) = UrL
        With CeL.Resize(UBound(tablo), UBound(tablo, 2))
            .ClearContents
            .Value = tablo
            .EntireColumn.AutoFit
            ActiveSheet.ListObjects.Add(xlSrcRange, .Cells, , xlYes).Name = "Tableau COURSE_" & Lig
        End With
    Next
End Sub

resultat

demo

RE

sur quelle ligne elle plante!!????

il faut faire plus d'éfforts dans vos réponses

que l'on soit pas obligé de vous sortir les vers du nez

Comme toi, j'essaie de répondre au demandeur donc tes commentaires désobligeants tu peux te les garder : avec tes142 messages tu es qui pour me donner de leçons ?

Je me me montrer moins stupide

Set tabl = .getelementsbytagname("table")(0)

renvoie comme déjà dit incompatibilité de type

Ton image animée montre que le code n'apporte rien de plus qu'une requête qui se fait en quelques manips très simples...

re

par ce que pour toi

le fait que j'ai perdu mon MDP et je me soit inscrit sous un autre pseudo et donc mon compte message est retombé a zero , fait de toi un crack

tu fait pitié mon pauvre

et combien même une reponse du genre "La macro GO plante chez moi (incompatibilité de type)"

ca veut rien dire et puisque tu es tant un crack ,je ne devrait même pas avoir à te le dire

alors a mon tour , ton message désobligeant du genre avec tes "142 messages...." et cette fois ci contrairement à moi injustifié , tu sais ou tu peux te le mettre hein

pour info patrickt et patricktoulon c'est la même chose

maintenant minot ,tu sais a qui tu t'adresse

Ton image animée montre que le code n'apporte rien de plus qu'une requête qui se fait en quelques manips très simples...

jusqu'a preuve du contraire le demandeur n'a pas parler de power query

et le luxe c'est d'avoir le choix (ça non plus je ne devrais pas avoir à te l'apprendre )

bonne fin de journée

RE

Chris,

J'ai un peu de mal à me familiarisé avec PowerQuery....

Pouvez-vous m'indiquer les étapes à suivre pour obtenir le résultat que vous me proposez?

C'est ultra simple : il suffit

  • d'avoir la liste des URL dans un tableau structuré, de cliquer sur une cellule du tableau puis Données, A partir d'un tableau ce qui ouvre l'interface PowerQuery
  • Ajouter une colonne, Colonne personnalisée, taper la formule
    =Web.Page(Web.Contents([Url]))
  • cliquer sur la double flèche à gauche du titre de colonne Personnalisé et décocher tout sauf Data
  • cliquer sur la double flèche à gauche du titre de colonne Data et valider (la toute dernière case à cocher est décochée)
  • filtrer la colonne Rang pour ne pas afficher les valeurs null
  • éventuellement typer la colonne Rang en numérique (clic droit sur la colonne modifier le type)
  • fermer PowerQuery

Bonsoir,

(N'apporte rien au fil)

Chris, je suis quand même extrêmement déçu que tu n'aies pas reconnu le :

- Dieu

- Créateur

- GOAT (Greatest Of All Time)

pour info patrickt et patricktoulon c'est la même chose

maintenant minot ,tu sais a qui tu t'adresse

Du VBA....

re

Bonsoir cousinhub

personne n'est dieu ici bas

je l'ai simplement remis a sa place

j'avais juste demandé un peu plus d'éfforts que des réponses évasives du genre "j'ai une erreur" ou "ça marche pas"

il m'est tombé a bras raccourci dessus
il est mal tombé le bonhomme
je suis quand même deçu de ce comportement dans l'autre monde excel nous avons plusieurs fois échangé et ça ne c'est jamais produit

bref maintenant vous savez je part au quart de tour

RE

(N'apporte rien au fil)

Chris, je suis quand même extrêmement déçu que tu n'aies pas reconnu le :

- Dieu

- Créateur

- GOAT (Greatest Of All Time)

pour info patrickt et patricktoulon c'est la même chose

maintenant minot ,tu sais a qui tu t'adresse

Du VBA....

De developpez à XLD je le connaissais mais avec ce nouveau pseudo et ce caractère de chien ici, je n'avais pas fait le rapprochement.
Je vais éviter les échanges à l'avenir. Minot me faire bien rire et, comme disait Merle, à ventre déboutonné !

Tiens à propos de pseudo j'ai échangé à ton propos avec tites couettes

Merci beaucoup Chris!

Avec tes explications, j'arrive à reproduire le résultat sur mon "vrai" classeur. je commence à comprendre le fonctionnement de PowerQuery, mais il me reste du taf!!

Désolé d'être à l'origine, avec ce sujet, de l'embrouille avec PatrickT . Je m'en excuse à vous 2.

PatrickT, je n'arrive pas non plus à exécuter ta macro , incompatibilité de type sur cette ligne:

Set tabl = .getelementsbytagname("table")(0)

Chris, j'applique votre méthode, cependant j'ai un soucis majeur: lors de l'actualisation de la requête (dans le futur) certaines URL seront hors ligne et je voudrais quand même conserver les données liées à ces URL après actualisation avec de nouvelles URL....

Que me conseillez vous dans ce cas?

Eric

Bonjour

Tu n'es pour rien dans nos échanges d'amabilités .

Si les URL disparaissent alors il faut faut anticiper.

J'ai créé

  • une colonne supplémentaire Verif dans la liste des URL qui teste si l'URL existe (Fonction personnalisée VBA)
  • une tableau d'archivages Archives
  • une code qui se déclenche à l'ouverture du classeur

Ce code

  • vérifie les lignes du tableau des URL où Verif est FAUX
  • dans ce cas cherche les ligne correspondantes dans le résultat de la requête et si elle les trouve :
    • copie les lignes dans le tableau Archives puis supprime ces lignes
    • supprime la ligne traitée du tableau des URL

J'ai aussi corrigé la requête pour que les lignes d'URL dont Vérif est FAUX ne soient pas prise en compte

6url-velo.xlsm (35.75 Ko)
Rechercher des sujets similaires à "creer base donnee important donnees web balise"