23.11.2012 Views

Python para todos

Python para todos

Python para todos

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

try:<br />

f = urllib2.urlopen(“http://www.python.org”)<br />

print f.read()<br />

f.close()<br />

except HTTPError, e:<br />

print “Ocurrió un error”<br />

print e.code<br />

except URLError, e:<br />

print “Ocurrió un error”<br />

print e.reason<br />

Interactuar con webs<br />

Al trabajar con urllib2 nos podemos encontrar, como vemos, con<br />

errores de tipo URLError. Si trabajamos con HTTP podemos encontrarnos<br />

también con errores de la subclase de URLError HTTPError, que<br />

se lanzan cuando el servidor devuelve un código de error HTTP, como<br />

el error 404 cuando no se encuentra el recurso. También podríamos<br />

encontrarnos con errores lanzados por la librería que urllib2 utiliza<br />

por debajo <strong>para</strong> las transferencias HTTP: httplib; o con excepciones<br />

lanzadas por el propio módulo socket.<br />

La función urlopen cuenta con un parámetro opcional data con el que<br />

poder enviar información a direcciones HTTP (y solo HTTP) usando<br />

POST (los parámetros se envían en la propia petición), por ejemplo<br />

<strong>para</strong> responder a un formulario. Este parámetro es una cadena codificada<br />

adecuadamente, siguiendo el formato utilizado en las URLs:<br />

‘password=contrase%A4a&usuario=manuel’<br />

Lo más sencillo <strong>para</strong> codificar la cadena es utilizar el método urlencode<br />

de urllib, que acepta un diccionario o una lista de tuplas (clave,<br />

valor) y genera la cadena codificada correspondiente:<br />

import urllib, urllib2<br />

<strong>para</strong>ms = urllib.urlencode({“usuario”: “manuel”,<br />

“password”: “contraseña”})<br />

f = urllib2.urlopen(“http://ejemplo.com/login”, <strong>para</strong>ms)<br />

Si lo único que queremos hacer es descargar el contenido de una URL<br />

a un archivo local, podemos utilizar la función urlretrieve de urllib<br />

en lugar de leer de un objeto creado con urlopen y escribir los datos<br />

97

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!