Python Accesso a Internet utilizzando Urllib.Request e urlopen()
โก Riepilogo intelligente
urllib รจ lo standard Python modulo per l'accesso ai dati internet, che consente ai programmi di aprirsi URLe recuperare contenuti HTML, JSON o binari. La funzione urllib.request.urlopen() si connette a un indirizzo web e legge la risposta del server direttamente in Python.

Le sezioni seguenti spiegano cos'รจ urllib, come aprire un URL e leggere il suo codice HTML, come gestire gli errori, scaricare file e scegliere tra urllib e la libreria requests.
Cos'รจ l'urllib?
urllib รจ un Python modulo utilizzabile per l'apertura URLs. Definisce funzioni e classi per aiutare in URL azioni.
Con Python, puoi anche accedere e recuperare dati da Internet, come XML, HTML e JSON, e quindi lavorare direttamente con questi dati. Nelle sezioni seguenti vedremo come recuperare dati dal Web. Ad esempio, qui utilizziamo un GuruVideo 99 URL, accedi utilizzando Pythone stampare il file HTML di questo URL.
Il pacchetto urllib raggruppa diversi moduli: urllib.request per l'apertura URLs, urllib.error per le eccezioni che le richieste possono generare, urllib.parse per la costruzione e l'analisi URLe urllib.robotparser per la lettura dei file robots.txt.
Come aprire URL utilizzando Urllib
Prima di eseguire il codice per connettersi ai dati di Internet, dobbiamo importare il URL modulo di libreria, o โurllibโ.
- Importa urllib
- Definisci la tua funzione principale
- Dichiarare la variabile webUrl
- Quindi chiama la funzione urlopen sulla libreria urllib
- Migliori URL stiamo aprendo รจ il Guru99 tutorial su YouTube
- Successivamente, stampiamo il codice del risultato
- Il codice risultato viene recuperato chiamando la funzione getcode sulla variabile webUrl che abbiamo creato
- Convertiamo questo valore in una stringa, in modo che possa essere concatenato con la nostra stringa "codice risultato".
- Si tratterร di un normale codice HTTP "200", che indica che la richiesta HTTP รจ stata elaborata correttamente.
Come ottenere un file HTML da un URL in Python
ร anche possibile leggere il file HTML utilizzando la funzione read() in PythonQuando esegui il codice, il file HTML apparirร nella console.
- Chiama la funzione read() sulla variabile webUrl
- Il metodo read() consente di leggere il contenuto dei file di dati
- Leggi l'intero contenuto del URL in una variabile chiamata dati
- Esegui il codice e i dati verranno stampati in formato HTML.
Ecco il codice completo:
Python 2 Esempio
# # read the data from the URL and print it # import urllib2 def main(): # open a connection to a URL using urllib2 webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com") #get the result code and print it print "result code: " + str(webUrl.getcode()) # read the data from the URL and print it data = webUrl.read() print data if __name__ == "__main__": main()
Python 3 Esempio
# # read the data from the URL and print it # import urllib.request # open a connection to a URL using urllib webUrl = urllib.request.urlopen('https://www.youtube.com/user/guru99com') #get the result code and print it print ("result code: " + str(webUrl.getcode())) # read the data from the URL and print it data = webUrl.read() print (data)
Come gestire gli errori di urllib: URLErrore e HTTPError
Una richiesta non sempre va a buon fine. Quando qualcosa va storto, urllib genera un'eccezione anzichรฉ restituire dati, quindi รจ importante gestire questi errori. Il modulo urllib.error definisce due classi di eccezione principali.
- Errore HTTP Viene generata quando il server restituisce un codice di stato di errore, come 404 Not Found o 500 Internal Server Error. Contiene il codice di stato e il corpo della risposta.
- URLErrore Viene generata quando il server non รจ raggiungibile, ad esempio a causa di un nome di dominio errato o dell'assenza di connessione a Internet. Contiene un attributo che specifica il motivo dell'errore.
Poichรฉ HTTPError รจ una sottoclasse di URLErrore, intercetta sempre prima HTTPError in modo che ogni tipo di errore venga gestito separatamente:
from urllib.request import urlopen from urllib.error import HTTPError, URLError try: response = urlopen("https://www.guru99.com/no-such-page.html") data = response.read() except HTTPError as error: print("HTTP error:", error.code) except URLError as error: print("URL error:", error.reason)
La gestione di queste eccezioni impedisce al programma di bloccarsi e consente di registrare il problema, riprovare la richiesta o ricorrere ai dati memorizzati nella cache.
Come scaricare un file da un URL Utilizzando urllib
Leggere a URL Salvare i dati in memoria funziona per pagine di piccole dimensioni, ma per immagini, documenti PDF o set di dati รจ piรน semplice salvare la risposta direttamente su disco. Il modulo urllib.request offre due semplici modi per farlo.
La funzione urlretrieve() scarica un URL direttamente su un file locale in un'unica riga:
from urllib.request import urlretrieve urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")
Per un maggiore controllo, aprire il URL e scrivi i byte manualmente. Apri il file locale in modalitร binaria perchรฉ urlopen() restituisce byte, non testo:
from urllib.request import urlopen with urlopen("https://example.com/data.zip") as response: with open("data.zip", "wb") as file: file.write(response.read())
Per file molto grandi, leggere e scrivere in un ciclo utilizzando response.read(8192) in modo che l'intero file non venga mai mantenuto in memoria contemporaneamente.
urllib vs. la libreria requests in Python
urllib fa parte del Python ร una libreria standard, quindi funziona ovunque senza bisogno di installazione. La libreria di terze parti requests non รจ integrata, ma molti sviluppatori la preferiscono per il lavoro HTTP quotidiano perchรฉ la sua sintassi รจ piรน breve e leggibile.
Le principali differenze sono:
- Installazione: urllib spedisce con Python, mentre requests deve essere installato con pip.
- Decodifica: urllib restituisce byte grezzi che devi decodificare tu stesso, mentre requests decodifica automaticamente testo e JSON.
- Convenienza: La libreria requests gestisce sessioni, cookie e intestazioni personalizzate con meno codice.
- dipendenze: urllib non aggiunge nulla, mentre requests si basa su urllib3.
Scegli urllib quando non desideri dipendenze o hai bisogno solo di una richiesta rapida e una tantum. Scegli requests per progetti piรน grandi che prevedono autenticazione, sessioni o frequenti chiamate API. Entrambi inviano le stesse richieste HTTP di base, quindi la scelta si riduce a una questione di praticitร o di riduzione del numero di dipendenze.


