2012-08-15 26 views
5

Estoy tratando de descargar el html de una página que se solicita a través de una acción de javascript al hacer clic en un enlace en el navegador. Puedo descargar la primera página, ya que tiene una URL en general:Descargar html en python?

http://www.locationary.com/stats/hotzone.jsp?hz=1 

Pero hay enlaces a lo largo de la parte inferior de la página que son números (1 a 10). Así que si se hace clic en uno, se va a, por ejemplo, la página 2:

http://www.locationary.com/stats/hotzone.jsp?ACTION_TOKEN=hotzone_jsp$JspView$NumericAction&inPageNumber=2 

Cuando me puso ese URL en mi programa e intente descargar el html, me da el código HTML de una página diferente en el sitio web y creo que es la página de inicio.

¿Cómo puedo obtener el html de esta URL que usa javascript y cuando no hay una URL específica?

Gracias.

Código:

import urllib 
import urllib2 
import cookielib 
import re 

URL = '' 

def load(url): 

    data = urllib.urlencode({"inUserName":"email", "inUserPass":"password"}) 
    jar = cookielib.FileCookieJar("cookies") 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 
    opener.addheaders.append(('User-agent', 'Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1')) 
    opener.addheaders.append(('Referer', 'http://www.locationary.com/')) 
    opener.addheaders.append(('Cookie','site_version=REGULAR')) 
    request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data) 
    response = opener.open(request) 
    page = opener.open("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction").read() 

    h = response.info().headers 
    jsid = re.findall(r'Set-Cookie: (.*);', str(h[5])) 
    data = urllib.urlencode({"inUserName":"email", "inUserPass":"password"}) 
    jar = cookielib.FileCookieJar("cookies") 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 
    opener.addheaders.append(('User-agent', 'Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1')) 
    opener.addheaders.append(('Referer', 'http://www.locationary.com/')) 
    opener.addheaders.append(('Cookie','site_version=REGULAR; ' + str(jsid[0]))) 
    request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data) 
    response = opener.open(request) 
    page = opener.open(url).read() 
    print page 

load(URL) 

Respuesta

1

El selenium webdriver de la suite de herramientas de selenio utiliza navegadores estándar para recuperar el código HTML (que es la meta principal es la automatización de pruebas para aplicaciones web), por lo que es muy adecuado para el desguace de aplicaciones JavaScript ricos . Tiene bonitas fijaciones de Python.

que tienden a utilizar el selenio para agarrar la fuente de la página después de todas las cosas ajax es despedido y analizar con algo como BeautifulSoup (BeautifulSoup las arregla bien con incorrecto HTML).