Simulación del navegador – Python

Necesito acceder a algunas páginas HTML a través de un script de Python, el problema es que necesito la funcionalidad COOKIE, por lo tanto, una simple solicitud HTTP de urllib no funcionará.

¿Algunas ideas?

echa un vistazo a mecanizar . “Navegación web programática con estado en Python”.
Maneja las cookies automágicamente.

import mechanize br = mechanize.Browser() resp = br.open("http://www.mysitewithcookies.com/") print resp.info() # headers print resp.read() # content 

mecanizar también expone la API urllib2, con el manejo de cookies habilitado de forma predeterminada.

El módulo cookielib proporciona manejo de cookies para clientes HTTP.

El módulo cookielib define las clases para el manejo automático de cookies HTTP. Es útil para acceder a sitios web que requieren pequeños fragmentos de datos, cookies, que se configuran en la máquina cliente mediante una respuesta HTTP de un servidor web y luego se devuelven al servidor en solicitudes HTTP posteriores.

Los ejemplos en el documento muestran cómo procesar las cookies junto con urllib :

 import cookielib, urllib2 cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) r = opener.open("http://example.com/") 

Aquí hay algo que hace cookies, y como beneficio adicional, la autenticación para un sitio que requiere un nombre de usuario y contraseña.

 import urllib2 import cookielib import string def cook(): url="http://wherever" cj = cookielib.LWPCookieJar() authinfo = urllib2.HTTPBasicAuthHandler() realm="realmName" username="userName" password="passWord" host="www.wherever.com" authinfo.add_password(realm, host, username, password) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), authinfo) urllib2.install_opener(opener) # Create request object txheaders = { 'User-agent' : "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" } try: req = urllib2.Request(url, None, txheaders) cj.add_cookie_header(req) f = urllib2.urlopen(req) except IOError, e: print "Failed to open", url if hasattr(e, 'code'): print "Error code:", e.code else: print f print f.read() print f.info() f.close() print 'Cookies:' for index, cookie in enumerate(cj): print index, " : ", cookie cj.save("cookies.lwp") 

¿Por qué no pruebas Dryscrape para esto?

 Import dryscrape as d d.start_xvfb() Br = d.Session() Br.visit('http://URL.COM') #open webpage Br.at_xpath('//*[@id = "email"]').set('user@enail.com') #finding input by id Br.at_xpath('//*[@id = "pass"]').set('pasword') Br.at_xpath('//*[@id = "submit_button"]').click() #put id of submit button and click it 

No necesita cookies para almacenar cookies, solo instale Dryscrape y hágalo a su estilo.