Forum Programmation.shell Extraction de données d'une page web

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
26
sept.
2023

Bonjour,
J'essaie de faire un programme pour aller télécharger des coefficients de marée sur le site https://maree.info/78? pour l'année. Les coefficients sont disponibles pour les douze prochains mois.
L'ensemble des coefficients de l'année n'est pas accessible sur une seule page, elles sont affichées semaine par semaine. Il faudra donc que je fasse une boucle semaine par semaine et accéder au site en renseignant le jour dans l'adresse https://maree.info/78?d=20230927
Il faudra ensuite que je lance le script en cron tous les 1er du mois pour aller récupérer le mois de l'année d'après qui sera débloqué.

La page ressemble à ça:
Image

Les données qui m'intéressent sont celles de la colonne de droite " Dates Heures Hauteur Coeff"

J'ai essayé plusieurs techniques en shell (avec w3m et curl) et en python avec la librairie requests mais sans vrai succès, je récupère des données mais n'arrive pas à en extraire celles données qui m'intéressent.

Dans l'idéal je souhaiterai faire le script en python dans lequel je ferai une boucle sur l'année, semaine par semaine ou jour par jour et écrire les données dans un fichier texte avec la librairie pandas.
Je pensais concaténer les anciennes données et les nouvelles données avec panda.concat et supprimer les doublons s'il y en a entre les données historiques (déjà téléchargées et lues dans un fichier csv : data_hist.csv) et les nouvelles (nouvellement téléchargées: data_dl) avec drop_duplicates des objets pandas.
D=pd.concat([data_hist,data_dl]).drop_duplicates()
Puis écrire le fichier résultat dans le csv data_hist.csv

Je pensais faire la boucle sur les jours en incrémentant les jours avec datetime.timedelta, écrire le fichier au format texte (avec pandas) ça je sais faire, mais c'est sur la partie extraction des données de la page web que je sèche…

Auriez-vous des idées ?

Merci beaucoup !
Fanch

  • # Quelques pistes

    Posté par  (site web personnel, Mastodon) . Évalué à 8. Dernière modification le 27 septembre 2023 à 07:12.

    Il faut que tu récupères le HTML puis que tu exécutes des opérations de sélection HTML (ça ressemble un peu à des requêtes xpath mais à un peu plus haut niveau).

    Un tutoriel sur le scraping : https://www.ionos.fr/digitalguide/sites-internet/developpement-web/web-scraping-avec-python/

    Requests ou curl, c'est juste la première étape.

    Conseils complémentaires (inutile ?) :

    • fais ton script étape par étape. Déjà si tu récupères les données (sans même les stocker) c'est une bonne étape de faite
    • fais plusieurs scripts indépendants avec comme format d'échange des fichiers CSV . Ainsi en cas de défaillance d'une étape tu pourras rejouer l'étape sans embarquer tout le traitement.

    CSV est un format standard en python, tu peux lire un fichier et le transformer en liste et dictionnaires python en 2/3 lignes donc c'est pas une étape douloureuse de passer par des fichiers intermédiaires.

    Regarde l'exemple utilisant BeautifulSoup dans le lien ci-dessus, ça devrait te parler.

  • # le debut

    Posté par  . Évalué à 7.

    1°) ouvrir la page avec ton navigateur
    2°) afficher le code de la page (Ctrl+U sur mozzilla)
    3°) Chercher l'info dans la page de code (Ctrl+F)

    ca nous dit par exemple que le tableau de la semaine est dans le code

    <table cellspacing=0 id="MareeJours"> [...]
    </table>

    apres pour ton script tu l'extrait comme tu veux, à la main en traitant cette partie la de la page HTML, via des outils plus haut niveau qui peuvent aller prendre le contenu d'une DIV, ou d'une TABLE

  • # API

    Posté par  (site web personnel) . Évalué à 10.

    Avant de scrapper, c’est toujours utile de regarder si y’a des API dispos pour rendre le truc plus fiable. Et ça a l’air dispo !

    …c’est juste 8400€.

    https://diffusion.shom.fr/ptpproduct/product/subscribe/id/248

    Désolé pour l’inutilité du commentaire.

    • [^] # Re: API, ... on oublie

      Posté par  . Évalué à 7.

      Ce commentaire est peut être inutile, mais il est néanmoins très pertinent:

      Tout comme Météo France, le SHOM, organisme public financé par nos impôts, vend ses données à prix d'or.

      Il est ou l'Open Data avec lequel on nous bassine depuis quelques années ?

      "Si tous les cons volaient, il ferait nuit" F. Dard

      • [^] # Re: API, ... on oublie

        Posté par  (site web personnel) . Évalué à 4.

        n'étant pas un fervent défenseur du SHOM ni de l'IGN (ni de météo france d'ailleurs), je vais tout de même nuancer.

        j'avais tenté au siècle dernier d'utiliser des données du SHOM, peine perdue hormis leurs contrats hors de prix…

        vers 2010 quand j'avais regardé, ça s'était à peine amélioré…

        en revanche depuis ~2020 ça s'est un peu amélioré (avec des contributions à geoportail notamment).

        Il est ou l'Open Data avec lequel on nous bassine depuis quelques années ?

        là : https://www.data.gouv.fr/fr/organizations/shom/ mais pas forcément ce qui est attendu…

        pour une API, regarder comment les applis (non libres mais souvent gratuites) procèdent :

        cf. par exemple https://www.cnetfrance.fr/produits/applications-horaires-marees-39816652.htm

        ne pas (trop) regarder les simulateurs de marée qui se basent plutôt sur des calculs théoriques et non des points de mesure précis + corrections de courbes théoriques.

  • # a une époque ou j'ai dû faire ça ...

    Posté par  . Évalué à 2. Dernière modification le 27 septembre 2023 à 12:22.

    je l'ai fait en Ruby avec nokogiri.

    Bien plus efficace que tout ce que j'avais pu trouver en Python ou en shell à l'époque.

    Après ça dépend buen sûr de la façon dont le document HTML. Comme dit plus haut, en allant voir le code source tu retrouves la page, il reste donc à parcourir le document pour récupérer les infos.

  • # Attention ... lisez les CGU des sites avant de dire que vous allez faire un truc interdit !

    Posté par  . Évalué à 6.

    C'est pas très malin de détailler ainsi ton projet … je ne peux que te dire que c'est tout simplement interdit !

    Je cite entre autre, https://maree.info/cgu "Utilisation du site et des données qui y sont publiées"

    …/…

    Le site est destiné à une utilisation finale de consultation et n'a pas vocation d'être un serveur de données pour un traitement automatisé autres que ceux prévus et fournis par maree.info.

    Toute reproduction ou distribution non autorisée de tout ou partie des éléments et informations de ce site, des applications ou services associés est interdite.

    …/…

    eric.linuxfr@sud-ouest.org

  • # Pas forcément autorisé

    Posté par  (Mastodon) . Évalué à 5.

    Tu fais ce que tu veux, mais les CGUs du site ont l'air de t'interdire ce que tu veux en faire.

    Faut les comprendre, il payent l'API de SHOM, c'est 4200€ par an, c'est pas pour qu'un script avec un cron leur repique les infos.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Pas forcément autorisé

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      les CGUs du site ont l'air de t'interdire ce que tu veux en faire.

      Ah ouais ? Je ne les ai pas compris comme ça… :s
      Y des juristes dans la place pour nous éclairer ?

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

      • [^] # Re: Pas forcément autorisé

        Posté par  . Évalué à 5.

        Y'a des juristes dans la place pour nous éclairer ?

        J'irais défendre auprès du Conseil d'État

        • que l'information communiquée par les "services publics" compétents (Météo France, DGAC, SHOM, mettre la liste ici) à ceux qui sont responsables (les commandants de bords de voiliers ou d'ULM par exemple) de la vie d'autrui est incomplète
        • car beaucoup de données avancées/traitées par ces services sont payantes
        • et qu'en ce sens l’État a failli à ne pas tout mettre en œuvre pour protéger/informer ses administrés

        … mais bon, je ne le fais pas :)

        "Si tous les cons volaient, il ferait nuit" F. Dard

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.