Salut,
Je continue sur ma lancée.
Je voudrais récupérer des valeurs sur le site de mon fournisseur d’électricité et le script que j’ai créé me retourne ‹ 0 › comme valeur.
#! /usr/bin/env python3
import requests
from sys import argv
from bs4 import BeautifulSoup
from requests.auth import HTTPBasicAuth
res = requests.get('https://exemple.fr/', auth=HTTPBasicAuth('utilisateur', 'MotDePasse'))
soupe=BeautifulSoup(res.content, "html.parser")
print(soupe.find_all(class_="rouge1")[2].text.strip())
Je cherche à faire remonter les valeurs ci-dessous, une petite aide serait la bienvenue.
pour de-bug le mieux est que tu ouvre une fenêtre en ssh
puis tu tape python3 >>>
sur le prompt tu rentre les lignes de ton script une a une
pour la dernière tu tape juste
soupe.find_all(class_="rouge1")
comme ça tu vois ce qu’il répond
puis tu adapte
soupe.find_all(class_=« rouge1 »)[0]
soupe.find_all(class_=« rouge1 »)[1]
… etc jusqu’ à tomber sur la bonne info
aprés tu recadre la partie text fonction du résultat.
J’ai suivi scrupuleusement la méthode. J’y suis bien arrivé pour un autre site (ex. météoblue) avec un résultat, mais avec l’exemple ci-dessus je n’y arrive pas.
La valeur retournée = [ ] si je tape la la commande suivante:
>>> soup.find_all(class_ = "rouge1")
[]
Ceci dit la valeur que je recherche à isoler provient d’un tableau sur le site:
Merci également @Bben pour le code de ton scenario. Je m’en suis inspiré.
Je suis en train de faire des tests pour récupérer le suivi de colis sur le site de Mondial Relais (Leur API semblant être réservée aux pros, je tente donc le scraping. Je leur ai posé la question mais je n’ai pas eu de réponse pour le moment).
J’arrive bien à récupérer la date, l’heure et le dernier statut
mais je n’arrive pas à récupérer le nom du relais en utlisant :
>>> soupe.find(class_ = "mag")
>>>
D’après ce que je comprend de la réponse de @ZygOm4t1k dans le post suivant :
cela pourrait venir du fait que cette partie de la page est générée dynamiquement (via du JS dans mon cas et c’était de l’Ajax dans l’exemple ci-dessus). Si on inspecte la page, on trouve bien le nom du relais (voici une URL avec un exemple de colis).
En revanche, si on regarde le code source de la page ou qu’on l’enregistre au format HTML, le nom du relais ne se trouve pas dedans.
il va te falloir traiter la 2ième requette toi même.
en faite ce sont des ligne on le vois avec les \r\n
il faut le lire une a une puis nettoyer celle qui t’interesse
les \u003c et \u003e sont les < et > des balises je te laisse deviner et inventer la suite
Oui, il faut que je trouve un moyen pour remplacer tout les caractères spéciaux et accentués possibles. Je vais regarder çà.
EDIT : On peut effectivement faire plus simple en utlisant le codec unicode-escape pour convertir uniquement la partie unicode, réencoder en bytes puis redécoder en utf-8
Salut,
A priori ils ont rajouté un ‹ h › derrière le digit, donc ça foire le cast en integer… [Edit] je dirais plutôt que la quantité d’espace à changé, donc la selection de texte foire pour n’avoir que le nombre [/edit]
dans mon script j’ai ajouter import re
et remplacer subData['soleil']=int(soupe.find_all(class_ = "tab_sun")[i].text[62:64].strip())
par subData['soleil']=int(re.findall(r'\d+',soupe.find_all(class_ = "tab_sun")[i].text[0:200].strip())[0])
…à adapter of course.
Note : d’autre champs sont arrivé hors focus dans les sous selection de texte (.text[x,y]) !