In questo tutorial vogliamo importare i dati da una lista di URL contenuti in un file
Come esempio utilizzeremo il sito https://www.ilmeteo.it/ che mette a disposizione l'archivio dei dati atmosferici divisi per
- città
- anno
- mese

Il sito mette anche a disposizione i dati in formato CSV
Nell'immagine abbiamo di dati del comune di Andrano Dicembre 2024
L'indirizzo URL della pagina è
https://www.ilmeteo.it/portale/archivio-meteo/andrano/2024/Dicembre
Mentre quello dei dati in forma CSV è
https://www.ilmeteo.it/portale/archivio-meteo/andrano/2024/Dicembre?format=csv
Creazione del progetto Excel
Andiamo su Dati > Recupera dati > Da altre origini > Da Web

Inseriamo il link e appare la schermata.

Siccome non abbiamo bisogno di inserire informazioni di autenticazione, proseguiamo con Connetti

Il file CSV viene recuperato da WEB.
Facciamo click su Trasforma Dati

Otteniamo la tabella

In alcune località la alcuni dati vengono registrati con i decimali.
Esempio
https://www.ilmeteo.it/portale/archivio-meteo/Pachino/2024/Gennaio

Conviene quindi eliminare il passaggio Modificato tipo e tipizzare a mano le colonne:
- LOCALITA, FENOMENI - Testo
- DATA - Data
- TMEDIA °C, TMIN °C, TMAX °C, PUNTORUGIADA °C, PIOGGIA mm - Decimale
- VISIBILITA km, VENTOMEDIA km/h, VENTOMAX km/h, RAFFICA km/h, PRESSIONESLM mb, PRESSIONEMEDIA mb - numero Intero
- UMIDITA % - percentuale

La colonna UMIDITA % non visualizza i valori correttamente:

Dobbiamo dividere il valore per 100. Andiamo nel menù Trasforma > Standard > Dividi

Inseriamo 100

Ora la colonna Umidità è corretta.

Terminiamo questa parte dando il nome alla query archivio meteo. Salviamo con Home > Chiudi e Carica.

Otteniamo la tabella Excel

Formattiamo le colonne
- TMEDIA °C, TMIN °C, TMAX °C, PUNTORUGIADA °C, PIOGGIA mm - Decimale con una cifra

- UMIDITA % - percentuale senza decimali

Leggere gli indirizzi URL da una lista
Creiamo una tabella che contiene gli indirizzi URL relativi alle varie località che ci interessano. chiamiamo questa tabella url

Dal menù Dati > Da tabella / intervallo recuperiamo la lista

otteniamo la query:

Non ci interessa avere una tabella la salviamo semplicemente come connessione: Home > Chiudi e carica > chiudi e carica in

Crea solo connessione

Leggere tutti i dati usando gli URL della lista
Copia del codice
Ritorniamo in Power Query facendo doppio click su archivio meteo.
Andiamo in Visualizza > Editor avanzato.

Compiamo il codice in un blocco note. (CTRL + A, CTRL + C)

Questo ci permette di modificare il codice creando una funzione. Copiamo il codice: CTRL + A e CTRL + C
(url as text) =>
let
Risultato = try
let
Origine = Csv.Document(Web.Contents(url),[Delimiter=";", Columns=15, Encoding=65001, QuoteStyle=QuoteStyle.None]),
#"Intestazioni alzate di livello" = Table.PromoteHeaders(Origine, [PromoteAllScalars=true]),
#"Modificato tipo" = Table.TransformColumnTypes(#"Intestazioni alzate di livello",{{"DATA", type date}, {"TMEDIA °C", type number}, {"TMIN °C", type number}, {"TMAX °C", type number}, {"PUNTORUGIADA °C", type number}, {"PIOGGIA mm", type number}, {"PRESSIONEMEDIA mb", Int64.Type}, {"PRESSIONESLM mb", Int64.Type}, {"RAFFICA km/h", Int64.Type}, {"VENTOMAX km/h", Int64.Type}, {"VENTOMEDIA km/h", Int64.Type}, {"VISIBILITA km", Int64.Type}, {"UMIDITA %", Percentage.Type}}),
#"Divisa colonna" = Table.TransformColumns(#"Modificato tipo", {{"UMIDITA %", each _ / 100, Percentage.Type}})
in
#"Divisa colonna"
otherwise null
in
Risultato
Salviamo il file in un blocco note con nome fnGetMeteo.txt (il file può essere scaricato da qui)
Usciamo dall'editor avanzato e torniamo in Excel
Creazione della funzione personalizzata
Creiamo una Query vuota: Dati > Recupera dati > Query vuota

Rinominiamo la query in fnGetMeteo e andiamo in Visualizza > Editor avanzato

Incolliamo il codice e facciamo click su Fatto

Otteniamo la funzione

Torniamo sulla query url e su Aggiungi colonna > Richiama funzione personalizzata

Definiamo
- Nome nuova colonna : fnGetMeteo
- Query della funzione: fnGetMeteo
- url: url

Diamo ok.
Espandiamo la nuova colonna creata lasciando tutti i valori ma spegnendo Usa il nome della colonna originale come prefisso

Ora abbiamo tutti i dati.

Eliminiamo la colonna url in quanto città e data sono presenti nelle altre colonne.

Tipizziamo le colonne
- LOCALITA, FENOMENI - Testo
- DATA - Data
- TMEDIA °C, TMIN °C, TMAX °C, PUNTORUGIADA °C, PIOGGIA mm - Decimale
- VISIBILITA km, VENTOMEDIA km/h, VENTOMAX km/h, RAFFICA km/h, PRESSIONESLM mb, PRESSIONEMEDIA mb - numero Intero
- UMIDITA % - percentuale

Ordiniamo le colonne LOCALITA e DATA con ordinamento crescente

Terminiamo con Home > Chiudi e Carica
Per visualizzare i dati andiamo sulla Query url con il tasto destro e scegliamo Carica in

Scegliamo in una tabella > in un nuovo foglio di lavoro

Otteniamo la nuova tabella che possiamo formattare

Migliorie
Possiamo
- eliminare la pagina archivio meteo
- eliminare la query archivio meteo
- Rinominare la pagina url in dati meteo
Lavorare su più città mesi anni
Invece di scrivere a mano gli indirizzi url possiamo creare tre tabelle:
- Località
- Mesi
- Anni
In un nuovo foglio

Vogliamo creare un sistema per generare in automatico gli indirizzi url con la sintassi
https://www.ilmeteo.it/portale/archivio-meteo/[Località]/[anno]/[Mese]?format=csv
Partiamo dalla tabella Località con Dati > Da tabella/intervallo. otteniamo la query

Ordiniamo la colonna Località con Ordinamento crescente.

Terminiamo con Chiudi e Carica > Chiudi e carica in > Crea solo connessione.
Lo stesso lo facciamo per gli Anni

Infine per la tabella mesi.
Ora abbiamo le seguenti query

Creazione della nuova tabella dati meteo
Modifichiamo la query Località con doppio click.
Inseriamo una colonna personalizza ID Aggiungi colonna > Colonna personalizzata.

La formula è =1

La colonna è di tipo numero intero.

Facciamo la stessa cosa per la query Anni

Infine la per la query Mesi

Ora con questa colonna indice possiamo collegare le tre tabelle. Tornando sulla query Località andiamo in Home > Merge di query.

Selezioniamo in entrambe le tabelle la colonna ID

Otteniamo la nuova colonna Anni

Che possiamo espandere tenendo solo il campo Anni

Ripetiamo il merge con la tabella Mesi

Ed espandiamo la colonna Mesi

Rimuoviamo la colonna ID che ci è servita per fare la join con tutte le combinazioni di Località, Anni, Mesi

Ritorniamo alla sintassi
https://www.ilmeteo.it/portale/archivio-meteo/[Località]/[anno]/[Mese]?format=csv
Creiamo una colonna personalizzata con la prima parte dell'URL. Il nome è url e la formula è
=https://www.ilmeteo.it/portale/archivio-meteo

Trasciniamo la nuova url colonna a sinistra e la rendiamo di tipo testo.

Cominciamo unire tutte le colonne. Le selezioniamo tutte le colonne e andiamo in Trasforma > Merge di colonne.

Scegliamo
- Separatore : --Personalizzato--
- "/"
- Nuovo nome : url

Otteniamo

Manca ora la coda dell'indirizzo URL. Creiamo una nuova colonna personalizzata. la formula è
= "?format=csv"

otteniamo la colonna coda che rendiamo di tipo testo

Selezioniamo queste due colonne e le uniamo senza separatore in Trasforma > Merge di colonne.

Non ci rimane che aggiungere la nuova colonna tramite

Espandiamo la nuova colonna fnGetMeteo

Eliminiamo la colonna url e tipizzamo le colonne:
- LOCALITA, FENOMENI - Testo
- DATA - Data
- TMEDIA °C, TMIN °C, TMAX °C, PUNTORUGIADA °C, PIOGGIA mm - Decimale
- VISIBILITA km, VENTOMEDIA km/h, VENTOMAX km/h, RAFFICA km/h, PRESSIONESLM mb, PRESSIONEMEDIA mb - numero Intero
- UMIDITA % - percentuale
Gestire gli errori
Nella funzione fnGetMeteo se l'URL è errato vengono create delle righe "null".
Questo si crea da
- Nomi di città errati
- mesi, anni in cui non ci sono dati

Possiamo rimuovere le righe errate andando sil pulsante filtro della colonna LOCALITA > Rimuovi vuoti.

Non rimane che ordinare per LOCALITA e DATA. Terminiamo con Chiudi e carica.
Per vedere il risultato creiamo una tabella facendo click con il tasto destro sula query Località

Finalmente abbiamo

Possiamo eliminare quello che non serve più e mantenere solo le query

E le pagine
- Località
- LocalitàMesiAnni
In allegato due file
- recupera-dati-da-url-parziale.xlsx - prima di rimuovere query e fogli
- recupera-dati-da-url-meteo.xlsx - soluzione finale




