Come si può scaricare un file tramite HTTP nei tuoi script Python? È quello di cui parlo in questo articolo, dove ti spiego come fare in semplici passi.
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Il processo per scaricare un file tramite protocollo HTTP in uno script Python è davvero semplice ed immediato. Non serve assolutamente niente di trascendentale: solo il pacchetto “requests”.
Python e utilizzo dell’HTTP: “requests” è la parola chiave
Se si tratta di lavorare con il protocollo HTTP, che tu stia lavorando con delle API o semplicemente vuoi eseguire il download di un file in Python beh, questo pacchetto, ovvero “requests” ti permetterà di fare tutto questo.
In sintesi, questo pacchetto ti permette di fare richieste HTTP: solitamente per scaricare un file è sufficiente il metodo GET, ma potrai tranquillamente eseguire l’operazione anche in POST!
Partiamo dal primo punto, ovvero il minimo essenziale che ci serve per scaricare un file tramite HTTP:
# importo il pacchetto
import requests
# scrivo l'url del mio file
url = "https://ilmiositoweb.com/files/nome_del_file.zip
Faccio l’esempio con un file di tipo “zip” ma il caso può variare.
A questo punto, eseguo una richiesta GET in questo modo:
risultato = requests.get(url)
La variabile “risultato” quindi, conterrà tutto ciò che riguarda la richiesta fatta al server: incluso il file che vuoi scaricare!
Ci sono due attributi di questa variabile che ti devono interessare: lo status code e il content.
Status code e content: cosa ti interessa per scaricare un file in Python
Lo status code, seguendo le linee guida dei codici HTTP, è il codice con cui ci risponde il server: sperando che non sia un errore “Sono una teiera”!
Quindi, affinché sia andata a buon fine la richiesta di download lo status code dovrebbe essere un “200”.
Parallelamente, nell’attributo “content” troveremo i byte che compongono il nostro file.
Di per se il download l’abbiamo già fatto! Si tratta di salvare il file in locale!
Come?
Così:
# importo il pacchetto
import requests
# scrivo l'url del mio file
url = "https://ilmiositoweb.com/files/nome_del_file.zip
# eseguo la richiesta
risultato = requests.get(url)
# stampo a video lo status code
print(risultato.status_code)
if risultato.status_code == 200:
print("Download riuscito")
# salvo in locale i contenuti del file
file_locale = open("nome_del_file.zip","wb")
file_locale.write(risultato.content)
file_locale.close()
else:
print("Non posso proseguire con il download")
Prima di salutarti, avrai notato il flag “wb” nella “open”: questo perché non si tratta di un file di testo.
Il che significa che non bisogna leggere le righe del file, al contrario bisogna leggerne appunto i bytes.