¿Cómo usar Python para iniciar sesión en una página web y recuperar cookies para su uso posterior?
Quiero descargar y analizar la página web usando python, pero para acceder a ella necesito un par de cookies. Por lo tanto, primero necesito iniciar sesión a través de 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 poder usarlas en la solicitud para descargar la página web /datos.php.
¿Cómo haría esto en python (preferiblemente 2.6)? Si es posible sólo desea utilizar módulos incorporados.
2 answers
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 directo de la página que desea abrir, y puede usar opener
para ver cualquier página utilizando su cookie de sesión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-19 00:40:23
Aquí hay una versión usando 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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 08:59:16