2012-08-15 15 views
5

Ich versuche, das HTML einer Seite herunterzuladen, die über eine JavaScript-Aktion angefordert wird, wenn Sie auf einen Link im Browser klicken. Ich kann die erste Seite herunterladen, weil es eine allgemeine URL hat:Html in Python herunterladen?

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

Aber es gibt Links entlang der Unterseite der Seite, die Zahlen (1 bis 10). Also, wenn Sie auf einen Klick, geht es zu, zum Beispiel, Seite 2:

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

Als ich setzen diese URL in mein Programm und versuchen, die html herunterladen, es gibt mir den HTML-Code einer anderen Seite auf die Website und ich denke, es ist die Homepage.

Wie kann ich die HTML dieser URL erhalten, die Javascript verwendet und wenn es keine spezifische URL gibt?

Danke.

Code:

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) 

Antwort

1

Die selenium webdriver aus der Selen-Tool-Suite Standard-Browser verwendet die HTML (es das Hauptziel ist die Testautomatisierung für Web-Anwendungen) abgerufen werden, so dass es für die Verschrottung Javascript reicher Anwendungen gut geeignet ist, . Es hat schöne Python-Bindungen.

Ich neige dazu, Selen zu verwenden, um die Seitenquelle zu greifen, nachdem das ganze Ajax-Zeug abgefeuert wurde, und analysiere es mit etwas wie BeautifulSoup (BeautifulSoup kommt gut mit falschem HTML zurecht).