tag script defer attribute async javascript python browser screen-scraping

defer - raspar html generado por javascript con python



title html (5)

Como aquí no hay una respuesta completa, seguiré adelante y escribiré una.

Para eliminar las páginas procesadas con JS, necesitaremos un navegador que tenga un motor de JavaScript (ei, soporte de representación de JavaScript)

Opciones como Mecanizar , url2lib no funcionará ya que NO admiten JavaScript.

Así que aquí está lo que haces:

Configurar PhantomJS para ejecutar con Selenium . Después de instalar las dependencias para ambos (consulte this ), puede usar el siguiente código como ejemplo para obtener el sitio web completamente representado.

from selenium import webdriver driver = webdriver.PhantomJS() driver.get(''http://jokes.cc.com/'') soupFromJokesCC = BeautifulSoup(driver.page_source) #page_source fetches page after rendering is complete driver.save_screenshot(''screen.png'') # save a screenshot to disk driver.quit()

Necesito raspar un sitio con python. Obtengo el código html de origen con el módulo urlib, pero también necesito raspar un código html generado por una función javascript (que se incluye en el código html). Lo que esta función hace "en" el sitio es que cuando se presiona un botón, se genera un código html. ¿Cómo puedo "presionar" este botón con el código de Python? ¿Scrapy puede ayudarme? Capturé la solicitud POST con firebug pero cuando intento pasarla en la url obtengo un error 403. ¿Alguna sugerencia?


En Python, creo que Selenium 1.0 es el camino a seguir. Es una biblioteca que le permite controlar un navegador web real desde el idioma que elija.

Debe tener el navegador web en cuestión instalado en la máquina en la que se ejecuta el script, pero parece que es la forma más confiable de interrogar de manera programática los sitios web que usan mucho JavaScript.


He tenido que hacer esto antes (en .NET) y básicamente tendrá que alojar un navegador, hacer que haga clic en el botón y luego interrogar al DOM (modelo de objeto de documento) del navegador para obtener el HTML generado. .

Este es definitivamente uno de los inconvenientes de las aplicaciones web que se dirigen hacia un enfoque Ajax / Javascript para generar el lado del cliente HTML.


Para Scrapy (gran marco de raspado de Python) hay scrapyjs : un manejador de descargas / middleware adicional capaz de raspar el contenido generado por javascript.

Se basa en el motor webkit de pygtk, python-webkit y python-jswebkit y es bastante simple.