CodeGym /Corso Java /Python SELF IT /Automazione delle attività temporizzate per la raccolta r...

Automazione delle attività temporizzate per la raccolta regolare dei dati

Python SELF IT
Livello 40 , Lezione 1
Disponibile

1. Lavorare con API meteorologico

Ora che abbiamo padroneggiato le basi, vediamo uno scenario realistico. Immagina che dobbiamo raccogliere dati sul meteo ogni 30 minuti. Per farlo, utilizzeremo un'API per ottenere i dati meteorologici. Ovviamente, a scopi didattici, l'uso di un'API reale potrebbe essere limitato, quindi immagineremo come potrebbe sembrare.

Ottenere il meteo attuale tramite OpenWeather API

Questo esempio mostra come utilizzare requests per ottenere dati meteorologici di una città specifica, utilizzando l'API OpenWeather.

Python

import schedule
import time
import requests

def fetch_weather(city):
    api_key = "YOUR_API_KEY"  # Sostituisci con la tua API key di 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"Temperatura attuale a {city}: {temperature}°C")
        print(f"Descrizione meteo: {weather_description}")
    except requests.exceptions.RequestException as e:
        print(f"Errore durante l'ottenimento dei dati meteorologici: {e}")

def fetch_weather_of_london():
    fetch_weather("London")

# Imposta l'esecuzione dell'attività ogni 30 minuti
schedule.every(30).minutes.do(fetch_weather_of_london)

while True:
    schedule.run_pending()
    time.sleep(1)

Qui inviamo una richiesta GET all'API OpenWeather per ottenere il meteo attuale per una città specifica. Dalla risposta JSON estraiamo la temperatura e la descrizione del meteo, che stampiamo sullo schermo. Non dimenticare di sostituire YOUR_API_KEY con la tua chiave API.

Ottenere il tasso di cambio attuale tramite API

In questo esempio utilizzeremo requests per ottenere il tasso di cambio attuale tramite un'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()  # Controlla se la richiesta ha avuto successo
        data = response.json()
        usd_to_eur = data["rates"]["EUR"]
        print(f"Tasso di cambio USD verso EUR: {usd_to_eur}")
    except requests.exceptions.RequestException as e:
        print(f"Si è verificato un errore durante l'ottenimento dei dati: {e}")

# Imposta l'esecuzione dell'attività ogni 10 minuti
schedule.every(10).minutes.do(fetch_exchange_rate)

while True:
    schedule.run_pending()
    time.sleep(1)

Qui inviamo una richiesta GET all'API del tasso di cambio e otteniamo i dati in formato JSON. Il tasso di cambio USD verso EUR viene estratto dalla risposta JSON e stampato sullo schermo. Questo script può essere adattato per raccogliere dati su altre coppie di valute modificando la chiave in data["rates"].

Con questo script possiamo raccogliere continuamente dati sul meteo e sul tasso di cambio. Non male come inizio, vero?

Scenari pratici

L'automazione della raccolta dati può essere utile in diversi scenari:

  • Monitoraggio dello stato dei server: Controlli automatici dello stato del server possono individuare e avvisare su problemi prima che si verifichino.
  • Raccolta di dati dai social media: Analisi costante dei trend e delle menzioni del brand.
  • Monitoraggio dei tassi di cambio: Le variazioni dei tassi di cambio possono essere utili per affari o esigenze personali.

2. Esempio di raccolta automatizzata di dati web

E se volessimo raccogliere dati da una pagina web? Per esempio, controllare regolarmente la presenza di news. In questo caso ci vengono in aiuto BeautifulSoup e requests.

Raccolta di dati da una pagina web

Supponiamo di avere un sito da cui vogliamo raccogliere i titoli delle news. Ecco come possiamo farlo:

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)

In questo esempio possiamo vedere che ogni 60 minuti il nostro script controllerà la pagina web e stamperà i titoli delle news. Questo semplifica il processo di ottenere informazioni aggiornate.

Raccolta dei titoli dalle news di un sito

In questo esempio utilizzeremo requests per caricare la pagina HTML e BeautifulSoup per analizzare i titoli delle news.

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')  # Cerca tutti i tag <h3> (dove di solito si trovano i titoli)
        print("Ultimi titoli delle news su BBC:")
        for headline in headlines[:5]:  # Prendi i primi 5 titoli
            print("-", headline.get_text(strip=True))
    except requests.exceptions.RequestException as e:
        print(f"Errore durante l'ottenimento dei dati: {e}")

fetch_news_headlines()

Qui scarichiamo la pagina di BBC News e utilizziamo BeautifulSoup per cercare tutti i tag <h3>, dove si trovano i titoli delle news. Stampiamo i primi 5 titoli, rimuovendo spazi vuoti e simboli in eccesso con strip=True.

Raccolta dei prezzi dei prodotti da un negozio online

Questo esempio mostra come estrarre i dati sui prezzi dei prodotti da un sito di e-commerce (ad esempio, Amazon o un altro negozio). Utilizziamo requests per richiedere la pagina e BeautifulSoup per analizzare i prezzi.

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, come 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"Prodotto: {product_name}")
        print(f"Prezzo: {price} €")
    except requests.exceptions.RequestException as e:
        print(f"Errore durante l'ottenimento dei dati: {e}")
    except AttributeError:
        print("Impossibile trovare informazioni sul prodotto o sul prezzo")

# Esempio di link a un prodotto
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")

In questo esempio inviamo una richiesta GET con l'intestazione User-Agent, per evitare blocchi. Poi, utilizzando BeautifulSoup, cerchiamo il nome del prodotto utilizzando id="productTitle" e il prezzo del prodotto utilizzando la classe a-price-whole. Utilizziamo strip=True per rimuovere gli spazi vuoti.

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