Newbie: ¿Cómo superar el botón “onclick” de Javascript para raspar la página web?

Este es el enlace que quiero eliminar: http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U

La pestaña “Versión en inglés” está en la esquina superior derecha para mostrar la versión en inglés de la página web.

Hay un botón que debo presionar para leer la información de los fondos en la página web. De lo contrario, la vista se bloquea y el uso de shell scrapy siempre resulta vacío [].

Confirmed

Y la función de AgreeClick es:

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

¿Cómo puedo superar esta función onclick = “AgreeClick ()” para raspar la página web?

No puede simplemente hacer clic en el enlace dentro de scrapy (consulte Hacer clic en un botón en Scrapy ).

En primer lugar, compruebe si los datos que necesita ya están allí, en el html (está en el fondo, por lo que está ahí).

Otra opción es el 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") 

Una opción más es utilizar mecanizar . No puede ejecutar el código js, ​​pero, de acuerdo con el código fuente, AgreeClick simplemente establece la cookie ListFundShowDisclaimer en true . Este es un punto de partida (no estoy seguro si funciona):

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

Luego, puedes analizar el resultado con BeautifulSoup o lo que prefieras.

Use la biblioteca de spynner para Python para emular un navegador y ejecutar el javascript del lado del cliente.

 import spynner browser = spynner.Browser() url = "http://www.prudential.com/path/?args=values" browser.load(url) browser.runjs("AgreeClick();") markup = browser._get_html() 

Como puede ver, puede invocar cualquier función de Javascript disponible en la fuente de la página programáticamente.

Si también necesita analizar los resultados, le recomiendo BeautifulSoup .