2012-08-15 42 views
5

Tôi đang cố gắng tải xuống html của trang được yêu cầu thông qua hành động javascript khi bạn nhấp vào liên kết trong trình duyệt. Tôi có thể tải xuống trang đầu tiên vì trang có URL chung:Tải xuống html bằng python?

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

Nhưng có các liên kết dọc theo cuối trang là số (1 đến 10). Vì vậy, nếu bạn nhấp vào một, ví dụ: trang 2:

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

Khi tôi đặt URL đó vào chương trình của mình và cố gắng tải xuống html, nó cung cấp cho tôi html của một trang khác trên trang web và tôi nghĩ đó là trang chủ.

Tôi làm cách nào để có được URL của URL này sử dụng javascript và khi không có URL cụ thể?

Cảm ơn.

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) 

Trả lời

1

Các selenium webdriver từ bộ công cụ selen sử dụng các trình duyệt tiêu chuẩn để lấy mã HTML (Mục tiêu chính của nó là kiểm thử tự động cho các ứng dụng web), vì vậy nó rất thích hợp để tháo dỡ các ứng dụng javascript giàu . Nó có bindings Python tốt đẹp.

Tôi có xu hướng sử dụng selen để lấy nguồn trang sau khi tất cả nội dung ajax được kích hoạt và phân tích cú pháp với nội dung như BeautifulSoup (BeautifulSoup đối phó tốt với HTML không đúng định dạng).

Các vấn đề liên quan