1. Travailler avec une API météo
Maintenant qu'on a compris les bases, voyons un scénario réaliste. Imagine qu'on doit récolter les données météo toutes les 30 minutes. Pour cela, on va utiliser une API de météo. Bien sûr, à des fins éducatives, l'utilisation d'une vraie API peut être limitée, alors imaginons comment ça pourrait se passer.
Obtenir la météo actuelle via OpenWeather API
Cet exemple montre comment utiliser requests pour récupérer les données météo d'une ville spécifique en utilisant l'API OpenWeather.
import schedule
import time
import requests
def fetch_weather(city):
api_key = "YOUR_API_KEY" # Remplacez par votre clé API OpenWeather
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
temperature = data["main"]["temp"]
weather_description = data["weather"][0]["description"]
print(f"Température actuelle à {city}: {temperature}°C")
print(f"Description du temps: {weather_description}")
except requests.exceptions.RequestException as e:
print(f"Erreur lors de la récupération des données météo: {e}")
def fetch_weather_of_london():
fetch_weather("London")
# Configurer l'exécution de la tâche toutes les 30 minutes
schedule.every(30).minutes.do(fetch_weather_of_london)
while True:
schedule.run_pending()
time.sleep(1)
Ici, on envoie une requête GET à l'API OpenWeather pour obtenir la météo actuelle d'une ville donnée. Dans la réponse JSON, on extrait la température et la description du temps qu'on affiche à l'écran. N'oublie pas de remplacer YOUR_API_KEY par ta propre clé API.
Obtenir le taux de change actuel via une API
Dans cet exemple, on va utiliser requests pour récupérer le taux de change actuel via une API.
import schedule
import time
import requests
def fetch_exchange_rate():
url = "https://api.exchangerate-api.com/v4/latest/USD"
try:
response = requests.get(url)
response.raise_for_status() # Vérifie si la requête a réussi
data = response.json()
usd_to_eur = data["rates"]["EUR"]
print(f"Le taux de change USD vers EUR actuel: {usd_to_eur}")
except requests.exceptions.RequestException as e:
print(f"Une erreur est survenue lors de la récupération des données: {e}")
# Configurer l'exécution de la tâche toutes les 10 minutes
schedule.every(10).minutes.do(fetch_exchange_rate)
while True:
schedule.run_pending()
time.sleep(1)
Ici, on envoie une requête GET à l'API des taux de change pour obtenir des données au format JSON. Le taux USD vers EUR est extrait de la réponse JSON et affiché à l'écran. Ce script peut être adapté pour collecter des données sur d'autres paires de devises en modifiant la clé dans data["rates"].
Avec ce script, on peut collecter régulièrement des données météo et des taux de change. Pas mal pour un début, non ?
Scénarios d'utilisation réels
L'automatisation de la collecte des données peut être utile dans plusieurs scénarios :
- Surveillance des serveurs: Des vérifications automatiques de l'état des serveurs peuvent détecter et anticiper les problèmes avant qu'ils ne surviennent.
- Collecte de données sur les réseaux sociaux: Une analyse constante des tendances et des mentions de marques.
- Suivi des taux de change: Les variations des taux peuvent être utiles pour les entreprises ou les besoins personnels.
2. Exemple de collecte automatisée de données web
Et si on voulait collecter des données depuis une page web ? Disons, surveiller régulièrement les nouvelles informations. Pour cela, on va utiliser BeautifulSoup et requests.
Collecte de données d'une page web
Supposons qu'on ait un site d'où on veut récupérer les titres des actualités. Voici comment on pourrait faire :
import requests
from bs4 import BeautifulSoup
def fetch_news():
response = requests.get("http://example.com/news")
soup = BeautifulSoup(response.content, 'html.parser')
for headline in soup.find_all('h2', class_='news'):
print(headline.text)
schedule.every().hour.do(fetch_news)
while True:
schedule.run_pending()
time.sleep(1)
Dans cet exemple, on voit que toutes les 60 minutes, notre script vérifie la page web et affiche les titres des actualités. Cela simplifie le processus pour obtenir des informations à jour.
Collecte des titres des actualités d'un site web
Dans cet exemple, on va utiliser requests pour télécharger la page HTML et BeautifulSoup pour analyser les titres des actualités.
import requests
from bs4 import BeautifulSoup
def fetch_news_headlines():
url = "https://www.bbc.com/news"
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
headlines = soup.find_all('h3') # Recherche de tous les tags <h3> (où se trouvent souvent les titres)
print("Derniers titres d'actualités sur BBC :")
for headline in headlines[:5]: # On prend les 5 premiers titres
print("-", headline.get_text(strip=True))
except requests.exceptions.RequestException as e:
print(f"Erreur lors de la récupération des données: {e}")
fetch_news_headlines()
Ici, on télécharge la page BBC News et avec BeautifulSoup, on recherche tous les tags <h3> où se trouvent les titres d'actualités. On affiche les 5 premiers titres en enlevant les espaces et caractères superflus avec strip=True.
Collecte des prix des produits dans une boutique en ligne
Cet exemple montre comment extraire des données sur les prix des produits depuis un site e-commerce (par exemple, Amazon ou un autre magasin). On utilise requests pour demander la page et BeautifulSoup pour analyser les prix.
import requests
from bs4 import BeautifulSoup
def fetch_product_price(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/89.0.4389.82 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
product_name = soup.find('span', {'id': 'productTitle'}).get_text(strip=True)
price = soup.find('span', {'class': 'a-price-whole'}).get_text(strip=True)
print(f"Produit: {product_name}")
print(f"Prix: {price} €")
except requests.exceptions.RequestException as e:
print(f"Erreur lors de la récupération des données: {e}")
except AttributeError:
print("Impossible de trouver les informations sur le produit ou le prix")
# Exemple de lien vers un produit
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")
Dans cet exemple, on envoie une requête GET avec un en-tête User-Agent pour éviter les blocages. Ensuite, avec BeautifulSoup, on recherche le nom du produit via son id="productTitle" et le prix du produit via la classe a-price-whole. On utilise strip=True pour retirer les espaces superflus.
GO TO FULL VERSION