2010-04-02 26 views
8

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á.Simulación del navegador - Python

¿Alguna idea?

+0

Varias implementaciones basadas en JavaScript de Python están disponibles (que pueden ejecutarse en un navegador web sin complementos adicionales). ¿Sería esto relevante? http://syntensity.com/static/python.html –

Respuesta

14

la salida Mechanize. "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 la administración de cookies activado por defecto.

+0

Puede ser bastante lento, entonces YMMV. –

+0

Gregg, ¿puedes explicarlo? básicamente es solo un contenedor alrededor de urllib2 –

+0

@Gregg, ¿me lo explicas? : D – RadiantHex

2

Aquí hay algo que hace las cookies, y como un bono hace 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") 
+0

@Mark: ¡muchas gracias! Esto funcionó a la perfección! – RadiantHex

+0

tal vez debería aceptar la respuesta, RH, si esto funcionó para usted. –

3

El cookielib module proporciona la administración de cookies para los 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ñas porciones de datos (cookies) que se configurarán en la máquina cliente mediante una respuesta HTTP desde un servidor web, y luego se devolverán al servidor en solicitudes HTTP posteriores.

Los ejemplos en la serie doc cómo procesar las galletas en conjunto con urllib:

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

¿Por qué no intenta 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('[email protected]') 
#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 es necesario lib cookie para almacenar cookies sólo tiene que instalar Dryscrape y lo hace en su estilo

+0

No uses la respuesta para promocionar una pregunta diferente. Eso es lo que son las recompensas para – Machavity

+0

Ok, lo siento por eso, pero ningún cuerpo responde mi pregunta por eso de alguna manera lo siento otra vez – Harry1992

Cuestiones relacionadas