Python scaricare file da internet: come si fa? La cosa è più semplice di quanto tu creda e in questo articolo puoi scoprire come fare anche tu in pochi minuti!
Python fra le tante cose che può fare, cavolo se ne può fare, ci permette di scaricare file da internet. Nonostante sia veramente una cosa semplicissima beh… Forse non saresti qui a chiederti come fare vero? 😀
Ma prima di guidarti alla soluzione, è giusto anche raccontarti chi sono per offrirtela.
Un saluto, io sono Lorenzo Neri e sono un informatico: mi occupo di realizzare contenuti che aiutino persone come te a padroneggiare l’arte del nuovo millennio, l’informatica!
Devi sapere che questo blog l’ho creato partendo da tutta quella serie di problemi che ho avuto lungo la mia carriera: perché quale miglior modo se non lasciare una traccia, un qualcosa che possa aiutare una persona come te che mi stai leggendo, affinché ne si possa beneficiare tutti quanti? Ciò detto, cominciamo!
Python download file: come scaricare file da internet in modo rapido ed efficace
Affinché si possa scaricare file da internet grazie al potere di Python beh… Hai bisogno di un modulo che permetta di fare una cosa molto semplice.
Richieste HTTP.
Per scaricare un file da internet è necessario eseguire una richiesta HTTP e Python questo non lo fa nativamente, ma non temere!
Un pacchetto che si chiama requests fa al caso tuo. Talmente comune che l’ho utilizzato in così tante volte da scrivere diversi articoli in merito sia a lui, sia a Python in generale, te li lascio qui se volessi approfondire, che esso ci permette di effettuare richieste HTTP a tutti gli effetti e per tutto.
La prima cosa di cui abbiamo bisogno però, è l’URI del file che vogliamo scaricare: per essere meno tecnichesi abbiamo bisogno dell’indirizzo della risorsa, in questo caso il file, che vogliamo scaricare.
Ma facciamo un esempio, anzi: ne facciamo due! Partiamo con il primo.
Download di un file di testo
Partiamo con un file di testo: il motivo? Perché è sufficiente leggerne i caratteri, ma su questo ci torniamo dopo: per ora concentriamoci sul contenuto 😉
Per scaricare un file di cui sappiamo l’URL, è sufficiente eseguire una richiesta HTTP di tipo GET.
Con il pacchetto menzionato prima, facciamo quanto segue:
# importo il pacchetto
import requests
# mi salvo l'URL del file
file_url="https://filesamples.com/samples/document/txt/sample3.txt"
# eseguo la richiesta HTTP
risultato = requests.get(file_url)
# prendo il contenuto dell'attributo "content" perché è lì che viene salvato il contenuto del file
contenuto = risultato.content
# salviamo il file
file_testo = open("sample3.txt","w")
file_testo.write(contenuto)
file_testo.close()
Così facendo abbiamo salvato il contenuto di testo del file scaricandolo direttamente da internet.
Nel caso avessi dubbi su come gestire i file in Python, non posso che lasciarti questo articolo che ho scritto in merito, ma poi torna qui perché dobbiamo parlare di un’altra modalità di download.
Scaricare file che NON sono di testo, ma di byte
Tutto molto bello e anche discretamente parecchio semplice fino a qui, vero?
Eh… E mò ti dirai “Lorenzo ma io se voglio scaricare con Python un file PDF, un’immagine, un file… MP3! Come faccio?”.
Giusta domanda, per questo ti ri-suggerisco l’articolo di prima nel caso non ti fosse chiaro che a questo giro dobbiamo leggere i byte e NON i caratteri 😀
Ora ti torna il gioco di parole di prima scommetto 🙂
File PDF, immagini, contenuti multimediali, beh… A livello di file sono rappresentati da uno stream di byte.
Certamente, quando proverai a fare il download tramite il pacchetto request senza dubbio vedrai un contenuto di tipo testuale, eppure, parliamoci chiaro:
But not as boring as watching ) Tj\r\nET\r\nBT\r\n/F1 0010 Tf\r\n69.2500 652.7520 Td\r\n( paint dry. And more text. And more text. And more text. And more text. ) Tj\r\nET\r\nBT\r\n/F1 0010 Tf\r\n69.2500 640.8000 Td\r\n(
Boring. More, a little more text. The end, and just as well. ) Tj\r\nET\r\nendstream\r\nendobj\r\n\r\n8 0 obj\r\n[/PDF /Text]\r\nendobj\r\n\r\n9 0 obj\r\n<<\r\n/Type /Font\r\n/Subtype /Type1\r\n/Name /F1\r\n/BaseFont /Helvetica\r\n/Encoding /WinAnsiEncoding\r\n>>\r\nendobj\r\n\r\n10 0
obj\r\n<<\r\n/Creator (Rave \\(http://www.nevrona.com/rave\\))\r\n/Producer (Nevrona Designs)\r\n/CreationDate (D:20060301072826)\r\n>>\r\nendobj\r\n\r\nxref\r\n0 11\r\n0000000000 65535 f\r\n0000000019 00000 n\r\n0000000093
00000 n\r\n0000000147 00000 n\r\n0000000222 00000 n\r\n0000000390 00000 n\r\n0000001522 00000 n\r\n0000001690 00000 n\r\n0000002423 00000 n\r\n0000002456 00000 n\r\n0000002574 00000 n\r\n\r\ntrailer\
Non ci hai capito nulla vero?
Quello che hai appena visto di fronte a te è un pezzo di PDF, ma per essere più precisi è una parte dei byte che compongono un file in formato PDF.
E quindi che si fa per scaricare file da internet con Python ma che non sono di testo?
Bisogna usare un trick, come del resto fa chi è iscritto alla mia newsletter 😀
Facciamo il nostro secondo esempio.
Ammettiamo di voler scaricare un semplicissimo PDF, lo stesso il cui esempio è riportato prima, questo qui.
Riprendendo l’esempio che abbiamo visto assieme in precedenza, adottando qualche modifica per scrivere byte su un file:
# importo il pacchetto
import requests
# mi salvo l'URL del file PDF
file_url="http://www.africau.edu/images/default/sample.pdf"
# eseguo la richiesta HTTP
risultato = requests.get(file_url)
# prendo il contenuto dell'attributo "content" perché è lì che viene salvato il contenuto del file, ma RICORDATI CHE SONO BYTE!
contenuto = risultato.content
# salviamo il file, aprendolo in modalità "WB" cioè "Write Bytes"
file_bytes = open("sample.pdf","wb")
file_bytes.write(contenuto)
file_bytes.close()
Se arrivato fino in fondo vedo! Ecco quindi svelati tutti i segreti su come scaricare file da internet grazie alla semplicità di Python 😀