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.

  • ๐Ÿ”˜ Libreria standard: urllib spedisce con Python e raggruppa i moduli request, error, parse e robotparser per URL attivitร .
  • โ˜‘๏ธ Aprire un URL: La funzione urllib.request.urlopen() apre una connessione e getcode() restituisce lo stato HTTP, ad esempio 200.
  • โœ… Leggi la risposta: Il metodo read() restituisce byte grezzi, che decode("utf-8") converte in testo leggibile.
  • ๐Ÿงช Gestire gli errori: Cattura HTTPError e URLErrore da urllib.error, quindi le richieste non riuscite non causano mai l'arresto anomalo del programma.
  • ๏ธ Scaricare files: La funzione urlretrieve() salva qualsiasi URL Saldo diretto su disco, ideale per immagini, PDF e set di dati.
  • ๐Ÿค– Pronto per l'intelligenza artificiale: urllib recupera set di dati e dati API che alimentano modelli di apprendimento automatico e pipeline di intelligenza artificiale.

Python Accesso a Internet tramite Urllib

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โ€.

Apri URL utilizzando 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.

File HTML da URL in Python

  • 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.

DOMANDE FREQUENTI

La funzione urlopen() restituisce un oggetto di risposta HTTP, solitamente un http.client.HTTPResponse. Si chiama read() per ottenere i byte grezzi, getcode() per leggere il codice di stato e headers o info() per esaminare i metadati come il tipo di contenuto e la lunghezza.

urllib2 apparteneva a Python 2. in Python 3 รจ stato riorganizzato: le sue caratteristiche sono state suddivise in urllib.request per l'apertura URLs e urllib.error per le eccezioni. Code Il codice scritto per urllib2 deve essere aggiornato per importare urllib.request.

La funzione read() restituisce byte, non una stringa, perchรฉ urlopen() non conosce la codifica in anticipo. La chiamata a decode("utf-8") converte quei byte in testo leggibile, consentendo di stampare, cercare o analizzare il contenuto HTML o JSON.

Aprire il URL con urlopen(), leggi i byte, decodificali, quindi analizzali con il modulo json: json.loads(response.read().decode("utf-8")). Questo restituisce un Python dizionario o lista che puoi utilizzare direttamente, una pratica comune quando si chiamano API web.

Avvolgi il file URL in un oggetto urllib.request.Request e aggiungi l'intestazione prima di aprirlo: request.add_header("User-Agent", "Mozilla/5.0"), quindi passa la richiesta a urlopen(). Le intestazioni personalizzate sono utili quando un server blocca quelle predefinite Python agente utente.

Sรฌ. urllib puรฒ recuperare set di dati, file CSV e JSON da API web, che poi puoi decodificare e caricare in pandas o NumPy. รˆ un modo leggero e senza dipendenze per importare dati di addestramento in una pipeline di machine learning.

Sรฌ. GitHub Copilot completa automaticamente i modelli comuni di urllib come le chiamate urlopen(), gli oggetti Request e la gestione degli errori try/except. Velocizza il codice ripetitivo, ma dovresti comunque verificarlo URLs, intestazioni e gestione delle eccezioni suggerite dall'assistente IA.

Codifica i tuoi parametri con urllib.parse.urlencode(), convertili in byte con encode(), quindi passali come argomento data a urlopen() o a un oggetto Request. Fornire i dati fa sรฌ che urllib invii automaticamente una richiesta POST anzichรฉ una richiesta GET.

Riassumi questo post con: