Python: descargar imágenes de una web
Hoy me he dado cuenta de algo terrible: ¡Aún no he escrito ninguna entrada acerca de Python, uno de de mis lenguajes de programación favoritos!
Voy a remediarlo comenzando con un sencillo script que permite descargarse imágenes de una web. Este script lo he usado como parte de un proyecto para un cliente que necesitaba descargarse automáticamente imágenes que le iban subiendo sus usuarios.
Ya que estamos en fiestas de Bilbao voy a poner un ejemplo que se descarga de la web del Ayuntamiento el cartel de las fiestas.
#!/usr/bin/env python # -*- coding: cp1252 -*- import httplib # Necesaria para hacer peticiones HTTP # Configuración dominio = 'www.bilbao.net' ruta_imagen = '/astenagusia2008/cartel2008.jpg' dir_downloads = '/home/gorka/' imagen_local = 'cartel_aste_nagusia.jpg' # Descargamos la imagen. Usamos try/except por si hay algún # error en la conexión try: # conectamos con el servidor conn = httplib.HTTPConnection(dominio) # hacemos la petición a la imagen conn.request ("GET", '/' + ruta_imagen) r = conn.getresponse() # abrimos o creamos el fichero donde vamos a guardar la imagen fichero = file( dir_downloads + '/' + imagen_local, "wb" ) # guardamos la imagen en el fichero fichero.write(r.read()) # y cerramos el fichero fichero.close() except: print "No se ha podido descargar la imagen"
Puedes hacer las pruebas cambiando los parámetros de configuración:
dominio: En este ejemplo es el del ayuntamiento (sin ‘http://’), sólo el dominio, en este caso bilbao.net.
ruta_imagen: es la ruta completa a la imagen, en este caso ‘astenagusia2008/cartel2008.jpg’.
(La URL completa de la imagen es: http://www.bilbao.net/astenagusia2008/cartel2008.jpg)
dir_downloads: directorio de nuestro ordenador donde queremos guardar la imagen (debe tener permiso de escritura).
imagen_local: nombre del archivo con el que queremos guardar la imagen.
Es posible que el servidor de donde intentes bajar la imagen no lo permita. Para saber si hay algún problema de ese tipo puedes imprimir el resultado de r.read() para ver si aparece algún mensaje de error (como ‘imagen no disponible’ o algo similar).

