Temas > Programacion > Python > Interactuar con webs en python
Julio

         Interactuar con webs
Existen dos módulos principales para leer datos de URLs en Python:
urllib y urllib2. En esta lección aprenderemos a utilizar urllib2
ya que es mucho más completo, aunque urllib tiene funcionalidades
propias que no se pueden encontrar en urllib2, por lo que también lo
tocaremos de pasada.
         puede leer datos de una URL usando varios protocolos como
urllib2
HTTP, HTTPS, FTP, o Gopher.
Se utiliza una función urlopen para crear un objeto parecido a un
fichero con el que leer de la URL. Este objeto cuenta con métodos
como read, readline, readlines y close, los cuales funcionan exac-
tamente igual que en los objetos file, aunque en realidad estamos
trabajando con un wrapper que nos abstrae de un socket que se utiliza
por debajo.
El método read, como recordareis, sirve para leer el â??archivo" completo
o el número de bytes especificado como parámetro, readline para leer
una línea, y readlines para leer todas las líneas y devolver una lista
con
ellas.
También contamos con un par de métodos geturl, para obtener la
URL de la que estamos leyendo (que puede ser útil para comprobar si
ha habido una redirección) e info que nos devuelve un objeto con las
cabeceras de respuesta del servidor (a las que también se puede acceder
mediante el atributo headers).
<?
    import urllib2
    try:
         f = urllib2.urlopen(â??http://www.python.org")
         print f.read()
         f.close()
    except HTTPError, e:
         print â??Ocurrió un error"
         print e.code
    except URLError, e:
         print â??Ocurrió un error"
         print e.reason
?>
Al trabajar con urllib2 nos podemos encontrar, como vemos, con
errores de tipo URLError. Si trabajamos con HTTP podemos encon-
trarnos también con errores de la subclase de URLError HTTPError, que
se lanzan cuando el servidor devuelve un código de error HTTP, como
el error 404 cuando no se encuentra el recurso. También podríamos
encontrarnos con errores lanzados por la librería que urllib2 utiliza
por debajo para las transferencias HTTP: httplib; o con excepciones
lanzadas por el propio módulo socket.
La función urlopen cuenta con un parámetro opcional data con el que
poder enviar información a direcciones HTTP (y solo HTTP) usando
POST (los parámetros se envían en la propia petición), por ejemplo
para responder a un formulario. Este parámetro es una cadena codifi-
cada adecuadamente, siguiendo el formato utilizado en las URLs:
    â??password=contrase%A4a&usuario=manuelâ??
Lo más sencillo para codificar la cadena es utilizar el método urlen-
code de urllib, que acepta un diccionario o una lista de tuplas (clave,
valor) y genera la cadena codificada correspondiente:
<?
    import urllib, urllib2
    params = urllib.urlencode({â??usuario": â??manuel",
                                   â??password": â??contraseña"})
    f = urllib2.urlopen(â??http://ejemplo.com/login", params)
?>
Si lo único que queremos hacer es descargar el contenido de una URL
a un archivo local, podemos utilizar la función urlretrieve de urllib
en lugar de leer de un objeto creado con urlopen y escribir los datos
leídos.
La función urlretrieve toma como parámetros la URL a descar-
gar y, opcionalmente, un parámetro filename con la ruta local en la
que guardar el archivo, un parámetro data similar al de urlopen y un
parámetro reporthook con una función que utilizar para informar del
progreso.
A excepción de las ocasiones en las que se utiliza el parámetro data
las conexiones siempre se realizan utilizando GET (los parámetros se
envían en la URL). Para enviar datos usando GET basta con concate-
nar la cadena resultante de urlencode con la URL a la que nos vamos a
conectar mediante el símbolo ?.
    params = 
<?
urllib.urlencode({â??usuario": â??manuel",
                                   â??password": â??contraseña"})
    f = urllib2.urlopen(â??http://ejemplo.com/login" +
                           â???" + params)?>
En urllib también se utiliza una función urlopen para crear nuestros
pseudo-archivos, pero a diferencia de la versión de urllib, la función
urlopen de urllib2 también puede tomar como parámetro un objeto
Request, en lugar de la URL y los datos a enviar.
La clase Request define objetos que encapsulan toda la información
relativa a una petición. A través de este objeto podemos realizar peti-
ciones más complejas, añadiendo nuestras propias cabeceras, como el
User-Agent.
El constructor más sencillo para el objeto Request no toma más que
una cadena indicando la URL a la que conectarse, por lo que utilizar
este objeto como parámetro de urlopen sería equivalente a utilizar una
cadena con la URL directamente.
Sin embargo el constructor de Request también tiene como paráme-
tros opcionales una cadena data para mandar datos por POST y un
diccionario headers con las cabeceras.













¿Has olviado tu contraseña?

Pulsa aquí para registrate




Google






LunMarMieJueVieSabDom
    123
45678910
11121314151617
181920 21222324
252627282930 

Jueves 21 de Noviembre 2024
Semana 47

..............................................................................................................................................................................................................................................
(Contacto)..
Esta web utiliza cookies para obtener datos estadísticos de la navegación de sus usuarios. Política de privacidad y Aviso legal