2013-05-07 18 views
7

Questo è il link che voglio raschiare: http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_UPrincipiante: come superare Javascript "onclick" per raschiare la pagina web?

La scheda "English Version" si trova nell'angolo superiore destro al fine di mostrare la versione inglese della pagina web.

C'è un pulsante che devo premere per leggere le informazioni sui fondi sulla pagina web. In caso contrario, la vista è bloccata e l'uso di shell scrapy risulta sempre vuoto [].

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

E la funzione di AgreeClick è:

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(); 

Come faccio a superare questo = ") AgreeClick (funzione" onclick per raschiare la pagina web?

risposta

4

Non è possibile fare semplicemente clic sul collegamento all'interno di scrapy (vedere Click a Button in Scrapy).

Prima di tutto, controlla se i dati che ti servono sono già lì - nel html (è sullo sfondo - quindi è lì).

Un'altra opzione è 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") 

più Una possibilità è quella di utilizzare mechanize. Non può eseguire il codice js, ma, in base al codice sorgente, AgreeClick imposta semplicemente il cookie ListFundShowDisclaimer a true. Questo è un punto di partenza (non so se funziona):

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() 

Quindi, è possibile analizzare il risultato con BeautifulSoup o quello che preferite.

+0

hai anche una soluzione in Richieste? Sto usando le richieste e ho bisogno di farlo. – Shaardool

4

Utilizzare la libreria spynner per Python per emulare un browser ed eseguire il javascript sul lato client.

import spynner 

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

browser.load(url) 

browser.runjs("AgreeClick();") 

markup = browser._get_html() 

Come si può vedere, si può ricorrere ad ogni funzione Javascript disponibile nel sorgente della pagina di programmazione.

Se è anche necessario analizzare i risultati, consiglio vivamente BeautifulSoup.

Problemi correlati