Extraire un tableau d'un code source
FerméFranky13000 Messages postés 3 Date d'inscription mercredi 17 août 2022 Statut Membre Dernière intervention 18 août 2022 - 18 août 2022 à 11:44
- Extraire un tableau d'un code source
- Code ascii tableau - Guide
- Tableau croisé dynamique - Guide
- Extraire une video youtube - Guide
- Comment faire un tableau - Guide
- Trier un tableau excel - Guide
3 réponses
Salut,
ce que vous présentez est du JSON, un format de stockage de données en texte.
Il n'y a pas de balise parce que la structure d'un document JSON n'en contient pas. Entre accolades vous avez les attributs de l'objet et après chaque attribut le signe " : " qui indique la valeur puis une virgule pour la valeur suivante.
Cette notation en plus d'être simple permet de conserver une structure objet.
objetJSON:{ valeur1:'bla', valeur2:10, valeur3:[10,'blabla', [3,2,1,'boom'] ], objetDansLObjet:{ valeurA:'a' , valeurB: 11 } }
JSON comme XML et CSV n'est qu'une structure de données en fichier texte. Donc pas exploitable si on lui dit pas les règles de séparations utilisées le programme ne voit que du texte et pas les données.
Il faut donc parser le fichier pour l'utiliser dans Python.
https://waytolearnx.com/2020/06/lire-ecrire-parse-le-json-avec-python.html
17 août 2022 à 18:14
Super merci ! J'ai réussi à parser la liste.
Cependant les listes à extraire (ligne 5098) sont noyées dans les 5881 ligne du code source de la page view-source:https://www.infoclimat.fr/climatologie-mensuelle/07650/juillet/2022/marseille-marignane-marseille-provence.html
Comment repérer, sélectionner automatiquement les bons objets json à parser et convertir en dictionnaire python ?
Bonjour, pas vraiment facile de récupérer les valeurs que tu souhaites, à part à coups d'expressions régulières, il n'y pas de solutions, json on l'oublie, trop strict.
import re import ast import urllib.request str_to_find = ( 'Pluie sur 24h', 'Température maximale', 'Température minimale', ) data = [] url = 'METTRE URL ICI' with urllib.request.urlopen(url) as f: content = f.read().decode() for m in re.finditer('(?<=\{)(.+?)}', content, flags=re.S): for s in str_to_find: if s in m[1]: # value = re.sub('\s{2,}', '', m[0]) value = re.sub('([\w ]+)(?=:)', '"\g<1>"', m[0]) value = '{' + value + '}' data.append(ast.literal_eval(value)) print(data)
Pour ne pas trop se prendre la tête, un coup d'eval sur la chaîne et hop le tour est joué, ne pas utiliser eval sur des données inconnues, ast.litteral_eval permet justement de faire cela de façon plus "sûre".
Note que si tu as besoin de faire d'autres tests, évite de spammer la page d'infoclimat, enregistre la page html en local et fais tes tests dessus, avec open et plus urlib.request.
Mais peut-être que sur ce site, il y a possibilité d'avoir des données brutes ? Je n'ai pas trop cherché.
18 août 2022 à 11:44
Merci beaucoup ! C'est super !
Je vais digérer ton code et faire les tests que tu dis. Encore merci beaucoup :)