F1 Help! La solución que buscabas

Desarrollo, programación, tips, consejos y soluciones para los usarios de PC

jueves, 22 de julio de 2010

Acceso web desde Python

Este tutorial se trata de acceder a una pagina web desde Python, obtener su codigo de fuente, y asi poder realizar ciertas acciones.

Empecemos por un codigo simple pero efectivo:
import urllib2,urllib
f = urllib2.urlopen("https://www.google.com.ar")
print f.read()
f.close()
Con ese simple codigo veremos que se imprime en la consola el codigo de fuente de la pagina de google.
Ahora un poco mas avanzado. Veremos como pasar informacion por metodo "POST" muy util para llenar formularios automaticamente. O tambien logins.
import urllib2,urllib
params = urllib.urlencode({"email": "xxxxxxxxxxxxxx@gmail.com", "pass": "xxxx"})
f = urllib2.urlopen("https://login.facebook.com/login.php?login_attempt=1",params)
print f.read()
f.close()
Como veran añadimos una variable mas al codigo con la informacion del metodo POST. Por lo general se debe guardar el nombre del objeto seguido con la informacion. Pero para esto sugiero leer tutoriales de programacion web.
Ademas pueden ver que añadimos la variable con los datos al metodo "urlopen" como un parametro mas.
Fijense que estamos tratando de loguernos con facebook. Por lo que busque los nombre de los campos de usuario y contraseña, como tambien la pagina a la que es redireccionado el explorador al tocar el boton de login.

Pero son necesarias un par mas de cosas para poder loguernos en facebook. Necesitamos activar las cookies; sino nos rechazaran. Para esto miren este codigo:
import urllib
import urllib2
datos = urllib.urlencode({'email':'tu_correo','pass':'tu_contrasenia'})
o = urllib2.build_opener(urllib2.HTTPCookieProcessor)
res = o.open('https://login.facebook.com/login.php?login_attempt=1', datos)
Aqui lo que hacemos previamente es crear un objeto "opener" de la libreria urllib pero le seteamos ciertos campos antes de abrir una pagina. No como antes que abriamos la paginade una. Simplemente este campo es para activar las Cookies.

Pero se llevaran una gran sorpresa si lo prueban con facebook. Ya que facebook tiene cierta restriccion con las cookies. Al ingresar a la pagina principal de facebook, se setean ciertas cookies que son necesarias para loguearse. Por lo tanto, pueden observar que no funcionan las cookies con facebook, en cambio, si funciona con otras paginas.

Pero siempre existe una solucion para esto. La idea es acceder primero a la pagina principal de facebook, obtener las cookies. Y luego loguearnos. Asi quedara el codigo:
import urllib
import urllib2
datos = urllib.urlencode({'email':'tu_correo','pass':'tu_contrasenia'})
o = urllib2.build_opener(urllib2.HTTPCookieProcessor)
o.open('https://www.facebook.com')
res = o.open('https://login.facebook.com/login.php?login_attempt=1', datos)

No hay comentarios: