CodeGym /Cours /Python SELF FR /Automatisation des tâches basées sur le temps pour la col...

Automatisation des tâches basées sur le temps pour la collecte régulière des données

Python SELF FR
Niveau 40 , Leçon 1
Disponible

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.

Python

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.

Python

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 :

Python

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.

Python

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.

Python

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.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION