Python Acceso a Internet mediante Urllib.Request y urlopen()

โšก Resumen inteligente

urllib es el estรกndar Python mรณdulo para acceder a datos de Internet, permitiendo que los programas se abran URLy recupera contenido HTML, JSON o binario. La funciรณn urllib.request.urlopen() se conecta a una direcciรณn web y lee la respuesta del servidor directamente en Python.

  • ๐Ÿ”˜ Biblioteca estรกndar: urllib se envรญa con Python y agrupa los mรณdulos de solicitud, error, anรกlisis y robotparser para URL tareas.
  • โ˜‘๏ธ Abra una URL: La funciรณn urllib.request.urlopen() abre una conexiรณn y getcode() devuelve el estado HTTP, como por ejemplo 200.
  • โœ… Lee la respuesta: El mรฉtodo read() devuelve bytes sin procesar, que decode(โ€œutf-8โ€) convierte en texto legible.
  • ๐Ÿงช Manejar errores: Capturar HTTPError y URLError de urllib.error, por lo que las solicitudes fallidas nunca bloquean el programa.
  • ๐Ÿ› ๏ธ Descargar archivos: La funciรณn urlretrieve() guarda cualquier URL Guarda directamente en el disco, ideal para imรกgenes, archivos PDF y conjuntos de datos.
  • ๐Ÿค– Preparado para la IA: urllib obtiene conjuntos de datos y datos de API que alimentan los modelos de aprendizaje automรกtico y los flujos de trabajo de IA.

Python Acceso a Internet mediante Urllib

Las secciones siguientes explican quรฉ es urllib, cรณmo abrir un URL y leer su cรณdigo HTML, y cรณmo manejar errores, descargar archivos y elegir entre urllib y la biblioteca requests.

ยฟQuรฉ es urllib?

urllib es un Python mรณdulo que se puede utilizar para abrir URLs. Define funciones y clases para ayudar en URL acciones.

Con PythonTambiรฉn puedes acceder y recuperar datos de Internet, como XML, HTML y JSON, y luego trabajar directamente con estos datos. En las secciones siguientes, veremos cรณmo recuperar datos de la web. Por ejemplo, aquรญ usamos un GuruVรญdeo 99 URL, accede a รฉl usando Pythony imprime el archivo HTML de este URL.

El paquete urllib agrupa varios mรณdulos: urllib.request para abrir URLs, urllib.error para las excepciones que pueden generar las solicitudes, urllib.parse para construir y analizar URLs, y urllib.robotparser para leer archivos robots.txt.

Como abrir URL usando Urllib

Antes de ejecutar el cรณdigo para conectarnos a los datos de Internet, necesitamos importar el URL mรณdulo de biblioteca, o โ€œurllibโ€.

Abra  URL usando Urllib

  • Importar URLlib
  • Define tu funciรณn principal
  • Declarar la variable webUrl
  • Luego, llama a la funciรณn urlopen de la biblioteca urllib.
  • El URL estamos abriendo es el Guru99 tutorial sobre YouTube
  • A continuaciรณn, imprimimos el cรณdigo resultante.
  • El cรณdigo de resultado se obtiene llamando a la funciรณn getcode en la variable webUrl que hemos creado.
  • Lo convertimos en una cadena, para que pueda concatenarse con nuestra cadena "cรณdigo de resultado".
  • Este serรก un cรณdigo HTTP estรกndar "200", que indica que la solicitud HTTP se procesรณ correctamente.

Cรณmo obtener un archivo HTML de un URL in Python

Tambiรฉn puede leer el archivo HTML utilizando la funciรณn read() en PythonAl ejecutar el cรณdigo, el archivo HTML aparecerรก en la consola.

Archivo HTML de URL in Python

  • Llama a la funciรณn read() en la variable webUrl.
  • El mรฉtodo read() permite leer el contenido de los archivos de datos.
  • Lea el contenido completo del URL en una variable llamada datos
  • Ejecuta el cรณdigo y se imprimirรกn los datos en formato HTML.

Aquรญ estรก el cรณdigo completo:

Python 2 Ejemplo

#  
# 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 Ejemplo

#
# 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)

Cรณmo solucionar los errores de urllib: URLError y HTTPError

Una solicitud no siempre tiene รฉxito. Cuando algo falla, urllib genera una excepciรณn en lugar de devolver datos, por lo que es importante gestionar estos errores. El mรณdulo urllib.error define dos clases de excepciรณn principales.

  • Error HTTP Se genera cuando el servidor devuelve un cรณdigo de estado de error, como 404 Not Found o 500 Internal Server Error. Contiene el cรณdigo de estado y el cuerpo de la respuesta.
  • URLError Se genera cuando no se puede acceder al servidor, por ejemplo, debido a un nombre de dominio incorrecto o a la falta de conexiรณn a internet. Incluye un atributo de motivo que explica el fallo.

Porque HTTPError es una subclase de URLEn caso de error, capture siempre primero el HTTPError para que cada tipo de error se gestione por separado:

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)

Gestionar estas excepciones evita que el programa falle y permite registrar el problema, reintentar la solicitud o recurrir a los datos almacenados en cachรฉ.

Cรณmo descargar un archivo de un URL Usando urllib

la lectura de un URL Para pรกginas pequeรฑas, almacenar en memoria funciona, pero para imรกgenes, documentos PDF o conjuntos de datos es mรกs sencillo guardar la respuesta directamente en el disco. El mรณdulo urllib.request ofrece dos maneras sencillas de hacerlo.

La funciรณn urlretrieve() descarga un URL directamente a un archivo local en una sola lรญnea:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

Para tener mรกs control, abra el URL y escribe tรบ mismo los bytes. Abre el archivo local en modo binario porque urlopen() devuelve bytes, no texto:

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())

Para archivos muy grandes, lea y escriba en un bucle usando response.read(8192) para que nunca se mantenga todo el archivo en la memoria a la vez.

urllib frente a la biblioteca requests en Python

urllib forma parte de Python Es una biblioteca estรกndar, por lo que funciona en cualquier lugar sin necesidad de instalaciรณn. La biblioteca requests de terceros no estรก integrada, pero muchos desarrolladores la prefieren para el trabajo HTTP cotidiano porque su sintaxis es mรกs corta y legible.

Las principales diferencias son:

  • Instalaciรณn: urllib se envรญa con Python, mientras que requests debe instalarse con pip.
  • Descodificaciรณn: urllib devuelve bytes sin procesar que usted mismo decodifica, mientras que requests decodifica automรกticamente el texto y el JSON.
  • Conveniencia: requests gestiona las sesiones, las cookies y los encabezados personalizados con menos cรณdigo.
  • Dependencias: urllib no aรฑade nada, mientras que requests se basa en urllib3 internamente.

Elige urllib si no necesitas dependencias o solo requieres una solicitud rรกpida y puntual. Para proyectos mรกs grandes que impliquen autenticaciรณn, sesiones o llamadas frecuentes a la API, elige requests. Ambas opciones envรญan las mismas solicitudes HTTP subyacentes, por lo que la decisiรณn se reduce a priorizar la comodidad frente a una menor cantidad de dependencias.

Preguntas Frecuentes

urlopen() devuelve un objeto de respuesta HTTP, normalmente un http.client.HTTPResponse. Se llama a read() para obtener los bytes sin procesar, a getcode() para leer el cรณdigo de estado y a headers o info() para inspeccionar metadatos como el tipo y la longitud del contenido.

urllib2 pertenecรญa a Python 2. en Python 3. Fue reorganizado: sus caracterรญsticas se dividieron en urllib.request para su apertura. URLs y urllib.error para excepciones. Code El texto escrito para urllib2 debe actualizarse para importar urllib.request en su lugar.

La funciรณn read() devuelve bytes, no una cadena, porque urlopen() desconoce la codificaciรณn de antemano. Al llamar a decode("utf-8"), esos bytes se convierten en texto legible para que puedas imprimir, buscar o analizar el contenido HTML o JSON.

Abra el panel de URL Con urlopen(), lee los bytes, decodifรญcalos y luego analรญzalos con el mรณdulo json: json.loads(response.read().decode(โ€œutf-8โ€)). Esto devuelve un Python Diccionario o lista que puedes usar directamente, lo cual es comรบn al llamar a las API web.

Envolver el URL en un objeto urllib.request.Request y agregue el encabezado antes de abrirlo: request.add_header(โ€œUser-Agentโ€, โ€œMozilla/5.0โ€), luego pase la solicitud a urlopen(). Los encabezados personalizados ayudan cuando un servidor bloquea el predeterminado Python agente de usuario.

Sรญ. urllib puede obtener conjuntos de datos, archivos CSV y JSON de API web, que luego se decodifican y se cargan en pandas o NumPy. Es una forma ligera y sin dependencias de incorporar datos de entrenamiento a un flujo de trabajo de aprendizaje automรกtico.

Sรญ. GitHub Copilot autocompleta patrones comunes de urllib, como llamadas a urlopen(), objetos Request y manejo de errores try/except. Acelera el cรณdigo repetitivo, pero aรบn asรญ debes verificarlo. URLEl asistente de IA sugiere funciones como encabezados, s y manejo de excepciones.

Codifica tus parรกmetros con urllib.parse.urlencode(), conviรฉrtelos a bytes con encode() y pรกsalos como argumento de datos a urlopen() o a un objeto Request. Proporcionar datos hace que urllib envรญe automรกticamente una solicitud POST en lugar de una GET.

Resumir este post con: