2008-10-09 21 views
138

Quiero descargar y analizar páginas web usando Python, pero para acceder necesito un par de cookies. Por lo tanto, primero necesito ingresar a https en la página web. El momento de inicio de sesión implica el envío de dos parámetros POST (nombre de usuario, contraseña) a /login.php. Durante la solicitud de inicio de sesión, quiero recuperar las cookies del encabezado de respuesta y almacenarlas para que pueda usarlas en la solicitud para descargar la página web /data.php.¿Cómo se usa Python para iniciar sesión en una página web y recuperar cookies para usarlas posteriormente?

¿Cómo haré esto en python (preferiblemente 2.6)? Si es posible, solo quiero usar módulos integrados.

Respuesta

144
import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
print resp.read() 

resp.read() es el HTML directamente de la página que desea abrir, y se puede utilizar opener para ver cualquier página usando la cookie de sesión.

+9

'resp.read()' le dará el contenido –

+1

Es esto seguro? ¿No permitirá esto que los rastreadores de paquetes vean las contraseñas de texto plano? ¿Sería más seguro usar Https? – Heartinpiece

+2

@Heartinpiece Sí, si el servidor lo ofrece, debe usar HTTPS. –

149

Aquí hay una versión utilizando la excelente biblioteca requests:

from requests import session 

payload = { 
    'action': 'login', 
    'username': USERNAME, 
    'password': PASSWORD 
} 

with session() as c: 
    c.post('http://example.com/login.php', data=payload) 
    response = c.get('http://example.com/protected_page.php') 
    print(response.headers) 
    print(response.text) 
+27

+1 esta es la forma moderna de hacerlo en python. –

+2

Es ''actividad ':' login'' realmente necesario en este ejemplo, o es solo un parámetro extra que se envía con la solicitud? – Ted

+1

@Ted Esa parte es totalmente necesaria. –

Cuestiones relacionadas