Mostrando entradas con la etiqueta Python. Mostrar todas las entradas
Mostrando entradas con la etiqueta Python. Mostrar todas las entradas

24/7/13

Python - Código Descargar Imágenes


Buenas a todos, después de darle muchas vueltas a unos cuantos de programitas que encontre, he realizado este pequeño programa.

Nos pide una URL y el nombre del directorio a crear, donde descargara todas las imágenes de dicha URL.
 
'''
Created on 23/07/2013

@author: aaguilar
'''

import urllib
import urllib2
import re
import sys
import os
from os.path import basename
from urlparse import urlsplit
 

EXTENSIONS = ['.jpg','.png','.gif','.jpeg']

def download_images_from_url(url):

    fichero = raw_input("Ingrese nombre del fichero donde descargar las imagenes >")    
    #Almaceno el directorio actual para volver al terminar
    directorioOriginal = os.getcwd()
    #Creamos el nuevo directorio
    directorio = os.path.join(fichero)
    if not os.path.isdir(directorio):
        os.mkdir(directorio)
    os.chdir(directorio)
       
    if not url.lower().startswith('http://') and not url.lower().startswith('https://'):
        url = 'http://%s'%url
        print 'Descargando imagenes desde %s...'%url
        print
        urlContent = urllib2.urlopen(url).read()

        # Busqueda del tag img en la pagina web.
        # HTML image tag: <img src="url" alt="some_text"/>

        imgUrls = re.findall('img .*?src="(.*?)"', urlContent)
        print "+--------------------------------------+"
        print "+ Descarga de imagenes                 +"
        print "+--------------------------------------+"
        print "+                                      +"
        print "+ Web:",url,(" "*(31-len(url)))+"+"
        print "+ Cantidad de imagenes: ",len(imgUrls),(" "*(13-len(str(len(imgUrls)))))+"+"
        print "+                                      +"
        print "+--------------------------------------+"
        print
 

        #Recorremos todas las imagenes
        for i in range(len(imgUrls)):
            if not imgUrls[i].lower().startswith('http://') and not url.lower().startswith('https://'):
                imgUrls[i] = url+"/"+imgUrls[i]
             

            nombreImagen = imgUrls[i][imgUrls[i].rfind('/')+1:len(imgUrls[i])]
            #llamamos al método que la descarga        
            download(imgUrls[i],nombreImagen,directorio)
                       
    print "Imagenes descargadas correctamente en > " + os.getcwd()
    os.chdir(directorioOriginal) # vuelve al directorio inicial
   
                       
def download(url, NOMBRE,directorio):
    try:
        furl = urllib2.urlopen(url)
        f = file(NOMBRE,'wb')
        f.write(furl.read())
        f.close()
        print "Descarga completada -->",NOMBRE
        print
        print
    except:
        print 'Unable to download file'
 

#Comenzamos
try:

    if __name__ == '__main__':
        args = sys.argv
               
        if len(args) < 2:
            url = raw_input("Ingrese URL >")
            download_images_from_url(url)
            print
        else:
            download_images_from_url(args[1])
            print       
        exit(0)

       
except Exception, e:
    print e
finally:
    print "Operacion Finalizada."


Os presento ahora una modificación que he realizado en el código, para solucionar que hay web que si detectan que no es un navegador el que realiza la petición, no nos permite recorrerla. Por otro lado subsanamos el problema que puede darse cuando las imagenes no tienen extensión, lo solucionamos añadiendole una por defecto, además añadimos un tratamiento por si el nombre de la imagen es relativo y tiene caracteres especiales, le damos un nombre aleatorio a la imagen.

'''
Created on 26/07/2013

@author: aaguilar
'''

import urllib
import urllib2
import re
import sys
import os
import time
from os.path import basename
from urlparse import urlsplit

EXTENSIONS = ['.jpg','.png','.gif','.jpeg']

def download_images_from_url(url):
   
    print url
   
    fichero = raw_input("Ingrese nombre del fichero donde descargar las imagenes >")


    #Almaceno el directorio actual para volver al terminar
    directorioOriginal = os.getcwd()
    directorio = os.path.join(fichero)

    #Creamos el nuevo directorio    
    if not os.path.isdir(directorio):
        os.mkdir(directorio)
    os.chdir(directorio)
       
    if not url.lower().startswith('http://') and not url.lower().startswith('https://'):
        url = 'http://%s'%url
   
    print 'Descargando imagenes desde %s...'%url
    print url
    #urlContent = urllib2.urlopen(url).read()
   
   
    values = {'name' : 'Yo'}
    data = urllib.urlencode(values)
    headers = {'User-agent': 'Mozilla/5.0' }
    req = urllib2.Request(url, data, headers)
    response = urllib2.urlopen(req)
    urlContent = response.read()


   
# Busqueda del tag img en la pagina web.
    # HTML image tag: <img src="url" alt="some_text"/>
   

    imgUrls = re.findall('img .*?src="(.*?)"', urlContent)
    print "+--------------------------------------+"
    print "+ Descarga de imagenes                 +"
    print "+--------------------------------------+"
    print "+                                      +"
    print "+ Web:",url,(" "*(31-len(url)))+"+"
    print "+ Cantidad de imagenes: ",len(imgUrls),(" "*(13-len(str(len(imgUrls)))))+"+"
    print "+                                      +"
    print "+--------------------------------------+"
    print
       
    # download all images
    contador = 0

  #Recorremos todas las imagenes
     for i in range(len(imgUrls)):
        print imgUrls[i]
        if not imgUrls[i].lower().startswith('http://') and not url.lower().startswith('https://'):
            imgUrls[i] = "http:"+imgUrls[i]
       
        nombreImagen = imgUrls[i][imgUrls[i].rfind('/')+1:len(imgUrls[i])]
 

        #Tratamos imagenes cuyo nombre tienen caracteres especiales
        if ('>' in nombreImagen or '<' in nombreImagen or '|' in nombreImagen or ':' in nombreImagen or '*' in nombreImagen or '"' in nombreImagen or '/' in nombreImagen  or '?' in nombreImagen or
'\\' in nombreImagen):
            contador = contador +1
            nombreImagen = "imagen"+str(contador)+".jpg"

        #Tratamos imagenes que no indican el formato
        elif '.' not in nombreImagen:
            contador = contador +1
            nombreImagen = "nombreImagen"+".jpg"


        #llamamos al método que la descarga          
        download(imgUrls[i],nombreImagen,directorio)
                       
    print "Imagenes descargadas correctamente en > " + os.getcwd()
    os.chdir(directorioOriginal) # vuelve al directorio inicial
   
                       
def download(url, NOMBRE,directorio):
    try:
        furl = urllib2.urlopen(url)
        #f = file("%s.png"%NOMBRE,'wb')
        f = file(NOMBRE,'wb')
        f.write(furl.read())
        f.close()
        print "Descarga completada -->",NOMBRE
        print
        print
       
    except:
        print 'Unable to download file'

#Comenzamos
 try:
    if __name__ == '__main__':
        args = sys.argv
               
        if len(args) < 2:
            url = raw_input("Ingrese URL >")
            print time.asctime()
            download_images_from_url(url)
            print
        else:
            download_images_from_url(args[1])
            print
       
        exit(0)

except Exception, e:
    print e
finally:
    print "Operacion Finalizada."
    print time.asctime()
   
     
   
               
    


22/7/13

Python - MySQL

En esta entrada vamos a realizar operaciones con una base de datos de MySQl. y con un fichero de texto plano.

Vamos a comenzar realizando operaciones con MySQL, creaemos una tabla, insertaremos un par de registros, los recuperaremos y visualizaremos.

En mi caso he creado un base de datos con MySQL Workbench 5.2, la he denominado "deusto".

Para poder trabajar con MySQL tendremos que intalar MySQLdb de esta página (última versión), bastara con descargarlo e instalarlo por defecto en el directorio de Python donde hemos instalado Python.

Una vez instalado ya podremos utilizar MySQLdb:

'''
Created on 22/07/2013

@author: aaguilar
'''


# Importa librerias de MySQL
 import MySQLdb

# La función connect devuelve un objeto de tipo Connection en función de los parámetros que le informemos
bbdd = MySQLdb.connect(host="localhost", # your host, usually localhost
                       user="root", # your username
                       passwd="root", # your password
                       db="deusto") # name of the data base

 print bbdd
 

# Las distintas operaciones que podemos realizar con la base de datos se realizan a través de un objeto Cursor.
c = bbdd.cursor()
 

# creemos una nueva tabla empleados en la base de datos
c.execute("""create table empleados(dni text,
             nombre text,
             departamento text)""")
 

# insertemos un par de tuplas en nuestra nueva tabla
c.execute("""insert into empleados
             values ('123456789-A','Javier Carrasco','Contabilidad')""")

c.execute("""insert into empleados
              values ('123456710-B','Manuel Aguilar','Contabilidad')""")
 

# Realizamos un commit para que las tuplas insertadas sean almacenadas
bbdd.commit()
 

# Realizamos una consulta sobre la tabla que hemos creado
c.execute("""select * from empleados""")
 

# Recorremos las tuplas que recuperamos en la consulta
for resultado in c.fetchall():
    print resultado
 

# Cerramos la conexión y el cursor
c.close()
bbdd.close()



Ahora vamos a probar otro ejemplo para realizar pruebas mas sencillas, donde en lugar de trabajar con una base de datos MySQL, vamos a trabajar sobre un fichero de texto plano.

Ppara ello utilizaremos SQLite, es una base de datos Open Source minimalista. Se caracteriza por:
 - No tener ningún demono por detras, los datos se almacenan en un único fichero, 
 - Es realmente pequeña, no exige practicamente recursos, no tiene depedencias.
 - Funcionalidad muy limitada, en comparación con otras bases de datos.
 - Multiplataforma
 - Utilizada por aplicaciones de escritorio.

Veamos el ejemplo con SQLite:
'''
Created on 22/07/2013

@author: aaguilar
'''

# Importa librerias de SQLite
import sqlite3 as dbapi
print dbapi.apilevel
print dbapi.threadsafety
print dbapi.paramstyle


# La función connect devuelve un objeto de tipo Connection que representa la conexión con el servidor.
# Siendo deusto.dat el nombre del fichero
 bbdd = dbapi.Connection("deusto.dat")

 print bbdd
 

# Las distintas operaciones que podemos realizar con la base de datos se realizan a través de un objeto Cursor.
c = bbdd.cursor()
 

# creemos una nueva tabla empleados en la base de datos
c.execute("""create table empleados(dni text,
             nombre text,
             departamento text)""")
 

# insertemos un par de tuplas en nuestra nueva tabla
c.execute("""insert into empleados
             values ('123456789-A','Javier Carrasco','Contabilidad')""")

c.execute("""insert into empleados
              values ('123456710-B','Manuel Aguilar','Contabilidad')""")
 

# Realizamos un commit para que las tuplas insertadas sean almacenadas
bbdd.commit()
 

# Realizamos una consulta sobre la tabla que hemos creado
c.execute("""select * from empleados""")
 

# Recorremos las tuplas que recuperamos en la consulta
for resultado in c.fetchall():
    print resultado
 

# Cerramos la conexión y el cursor
c.close()
bbdd.close()




Un saludo a todos.

5/7/13

Python - PyReadline 2.0



Para poder acceder a la característica de autocompletado de iPython 0.13.2 es necesario instalar PyReadline.

Para ello abrimos un intérprete de comandos de Windows desde el botón de inicio pulsando la opción de ejecutar y a continuación ejecutamos la instrucción cmd para invocar al intérprete de comandos de Windows:

Desde el intérprete ejecutamos la siguiente instrucción:

      C:\> pip install pyreadline

Esta instrucción descargará e instalará la última versión de PyReadline que exista, en este caso la 2.0.




Una vez finalizada esta instalación podemos dar finalizada la instalación del entorno de trabajo de Python 2.7.5

Oscar.

Python - iPython 0.13.2



Una vez instalado el instalador pip 1.3.1, procedemos a instalar iPython 0.13.2 que es un intérprete de comandos de Python mas potente que el que viene por defecto con Pyhton 2.7.5, además, contiene ciertas funcionalidades necesarias para ejecutar scrapy 0.1.6.5 como veremos más adelante.

Para ello, abrimos un intérprete de comandos de Windows desde el botón de inicio pulsando la opción de ejecutar:




A continuación ejecutamos la instrucción cmd para invocar al intérprete de comandos de Windows:


   



Desde el intérprete ejecutamos la siguiente instrucción:

C:\> pip install ipython

Esta instrucción descargará e instalará la última versión de iPython que exista, en este caso la 0.13.2.




     Una vez instalado iPython podemos invocarlo con la siguiente instrucción:

C:\> ipython




Y al igual que en la consola por defecto de Python 2.7.5 se pueden ejecutar instrucciones del lenguaje Python con la diferencia que cuenta con características añadidas muy interesantes, como el autocompletado  o el operador ?, aunque para activar la opción de autocompletado en Windows es necesario instalar PyReadline, el cual instalaremos a continuación.

Oscar.

Python - PIP 1.3.1



El siguiente paso consiste en instalar el instalador pip que nos permitirá descargar e instalar paquetes y librerías que pudiéramos necesitar para el entorno de desarrollo de Python de manera sencilla y rápida sin la necesidad de tener que buscarlos en la red.

Para ello, lo descargaremos de la siguiente página:




Seleccionamos el marcado en rojo que se corresponde con la versión de pip 1.3.1 para la versión de Python 2.7.5 y para Windows de 32 bits.

Una vez descargado el instalador, pip-1.3.1.win32-py2.7.exe, lo ejecutamos desde la misma carpeta donde se haya descargado en el ordenador, iniciándose un asistente que nos guiará por la instalación. Pulsamos el botón de ejecutar.





Esta ventana solo presenta información de la versión pip 1.3.1 que se va instalar. Pulsamos el botón de siguiente:




Esta ventana informa que pip 1.3.1 se va a instalar sobre el intérprete de comandos Python 2.7.5 que instalamos en el paso 2.1, Pulsamos el botón de siguiente:




Esta ventana inicia la instalación. Pulsamos el botón de siguiente:




Una vez finalizada la instalación satisfactoriamente cerramos el instalador pulsando el botón de finalizar:




Oscar.

2/7/13

Python (Instalando 2.7.5)

Antes de nada vamos a ver una pequeña introducción de que es Python (basada en la defnición de Wikipedia)


Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca un código legible.

Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License, que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.

Descarga e instalación de Python 2.7.5


El primer paso consiste en descargar e instalar el intérprete de comandos de Python, imprescindible para poder empezar a trabajar con el lenguaje. Para ello, hay que descargarlo de la siguiente página:





Seleccionamos el indicado en el recuadro rojo que se corresponde con la versión de Python 2.7.5 para Windows de 32 bits.

Existe otra versión posterior de Python, la 3.3.2. Pero como indican en la página, existe todavía software de terceros que no es compatible con esta versión.

Una vez descargado el instalador, python-2.7.5.msi, lo ejecutamos desde la misma carpeta donde se haya descargado en el ordenador, iniciándose un asistente que nos guiará por la instalación. Pulsamos el botón de ejecutar.



Esta ventana nos solicita si la consola se instalará para todos los usuarios o solo para usuario activo que ha ejecutado la instalación. Para este caso se instala para todos los usuarios y pulsamos el botón de siguiente:




Esta ventana nos informa del directorio por defecto donde se va instalar Python 2.7.5, teniendo la posibilidad de cambiarlo. Para este caso vamos a dejar el directorio que viene por defecto y pulsamos el botón de siguiente:




Esta ventana proporciona la posibilidad de seleccionar que características de Python queremos instalar. Para este caso la dejamos tal cual aparece por defecto y pulsamos el botón siguiente:





Esta ventana se inicia la instalación de Python 2.7.5 y nos informa del progreso de la instalación:







Una vez finalizada la instalación satisfactoriamente cerramos el instalador pulsando el botón de finalizar:




Ya podemos trabajar con Pyhton. Podemos comprobarlo ejecutando el archivo python.exe, que se encuentra en la carpeta donde se ha instalado el programa, en este caso en C:\Python27, lanzándose la ventana del de interprete de comandos:






Desde este intérprete ya se pueden ejecutar instrucciones del lenguaje Python como aparece en el ejemplo de arriba:

>>> Print “Hola Mundo”
>>> Hola Mundo

Para una correcta instalación de un ambiente de desarrollo Python, debemos seguir este orden, después de haber instalado el interprete de Python:

- Python - SETUPTOOLS 0.9.5 instalación de un paquete que permitirá descargar, instalar, actualizar o desinstalar paquetes Python mediante el comando easy_install.

- pip-131 instalador pip que nos permitirá descargar e instalar paquetes y librerías para el entorno de desarrollo de Python de manera sencilla y rápida sin la necesidad de tener que buscarlos en la red.


- iPython 0.13.2  intérprete de comandos de Python mas potente que el que viene por defecto con Pyhton 2.7.5.


- PyReadline 2.0 característica de autocompletado de iPython.
 

Podemos ver la entrada Paquetes de Python donde vienen enunciados algunos paquetes y/o módulos que nos pueden interesar.
Oscar