2013-05-07 12 views
7

tym odnośnikiem Chcę zeskrobać: http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_UNewbie: Jak pokonać przycisk "onclick" w JavaScript, aby zeskrobać stronę internetową?

Zakładka „English Version” jest w prawym górnym rogu, aby pokazać angielską wersję strony internetowej.

Jest przycisk, który muszę nacisnąć, aby odczytać informacje o funduszach na stronie internetowej. Jeśli nie, widok jest blokowany, a używanie powłoki scrapy zawsze powoduje pusty [].

<div onclick="AgreeClick()" style="width:200px; padding:8px; border:1px black solid; 
background-color:#cccccc; cursor:pointer;">Confirmed</div> 

i funkcji AgreeClick jest:

function AgreeClick() { 
var cookieKey = "ListFundShowDisclaimer"; 
SetCookie(cookieKey, "true", null); 
Get("disclaimerDiv").style.display = "none"; 
Get("blankDiv").style.display = "none"; 
Get("screenDiv").style.display = "none"; 
//Get("contentTable").style.display = "block"; 
ShowDropDown(); 

Jak mogę rozwiązać ten onclick = "AgreeClick()" funkcji do zeskrobać stronę internetową?

Odpowiedz

4

Nie można po prostu kliknąć łącza wewnątrz skrobaczki (zobacz Click a Button in Scrapy).

Przede wszystkim sprawdź, czy potrzebne dane już tam są - w html (jest w tle - więc jest tam).

Inną opcją jest selenium:

from selenium import webdriver 
import time 

browser = webdriver.Firefox() 
browser.get("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U") 

elem = browser.find_element_by_xpath('//*[@id="disclaimer"]/div/div') 
elem.click() 
time.sleep(0.2) 

elem = browser.find_element_by_xpath("//*") 
print elem.get_attribute("outerHTML") 

Jeszcze jedna opcja jest użycie mechanize. Nie można wykonać kodu js, ale zgodnie z kodem źródłowym, AgreeClick po prostu ustawia plik cookie ListFundShowDisclaimer na true. Jest to punkt wyjścia (nie wiem, czy to działa):

import cookielib 
import mechanize 

br = mechanize.Browser() 

cj = cookielib.CookieJar() 
ck = cookielib.Cookie(version=0, name='ListFundShowDisclaimer', value='true', port=None, port_specified=False, 
         domain='www.prudential.com.hk', domain_specified=False, domain_initial_dot=False, path='/', 
         path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, 
         rest={'HttpOnly': None}, rfc2109=False) 
cj.set_cookie(ck) 
br.set_cookiejar(cj) 

br.open("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U") 
print br.response().read() 

Następnie można analizować wynik z BeautifulSoup lub co wolisz.

+0

Czy masz również rozwiązanie w Żądaniach? Korzystam z Żądań i muszę to zrobić. – Shaardool

4

Użyj biblioteki spynner do Pythona, aby emulować przeglądarkę i wykonać javascript po stronie klienta.

import spynner 

browser = spynner.Browser() 
url = "http://www.prudential.com/path/?args=values" 

browser.load(url) 

browser.runjs("AgreeClick();") 

markup = browser._get_html() 

Jak widać, można wywołać programowo dowolną funkcję JavaScript dostępną w źródle strony.

Jeśli musisz przeanalizować wyniki, bardzo polecam BeautifulSoup.

Powiązane problemy