2012-08-15 8 views
5

ブラウザのリンクをクリックすると、JavaScriptのアクションによってリクエストされたページのHTMLをダウンロードしようとしています。それは一般的なURLがあるので、私は最初のページをダウンロードすることができます。Pythonでhtmlをダウンロードしますか?

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

をしかし、数字(1〜10)ですページの下部に沿ってリンクがあります。あなたがいずれかをクリックした場合ので、それはに行き、例えば、2ページ:私は私のプログラムにそのURLを入れて、HTMLをダウンロードしようとすると

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

、それは私の上の別のページのHTMLを与えます私はそれがホームページだと思います。

javascriptを使用し、特定のURLがない場合、このURLのhtmlを取得するにはどうすればよいですか?

ありがとうございました。

コード:

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) 

答えて

1

selenium webdriverセレンツールスイートからは、(それの主な目的は、Webアプリケーションのテスト自動化である)HTMLを取得するために、標準のブラウザを使用していますので、それはjavascriptの豊富なアプリケーションを廃棄するのに適しています。素晴らしいPythonバインディングがあります。

すべてのAjaxが起動された後にページソースを取得し、BeautifulSoupなどの構文解析を行った場合、セレンを使用する傾向があります(BeautifulSoupは不正な形式のHTMLにも対応します)。

関連する問題