2010-07-29 11 views
13

Estoy tratando de raspar y enviar información a sitios web que dependen en gran medida de Javascript para realizar la mayoría de sus acciones. El sitio web ni siquiera funciona cuando desactivo Javascript en mi navegador.Raspando sitios web con Javascript habilitado?

He buscado algunas soluciones en Google y SO y había alguien que me sugirió que debería realizar ingeniería inversa del Javascript, pero no tengo idea de cómo hacerlo.

Hasta ahora he estado usando Mechanize y funciona en sitios web que no requieren Javascript.

¿Hay alguna manera de acceder a los sitios web que usan Javascript usando urllib2 o algo similar? También estoy dispuesto a aprender Javascript, si eso es lo que se necesita.

+0

Por curiosidad, ¿cuál es el propósito de este ejercicio? ¿Los sitios web le importan que envíe los datos a sus formularios automáticamente? –

+0

Esto básicamente no es posible. – katrielalex

+3

Tom, no creo que les importe. O al menos espero que no lo hagan. Katrielalex, lo dudo seriamente. – user216171

Respuesta

6

Tal vez usted podría utilizar Selenium Webdriver, que tiene enlaces Python creo. Creo que se usa principalmente como una herramienta para probar sitios web, pero creo que también debería ser útil para analizar.

+0

1+ Selenio es una gran herramienta para raspar. (si no te importa cuán pesado es). El único inconveniente es que verá que el navegador hace lo que quiere. –

+0

Es posible ejecutar [Selenium headless] (http://stackoverflow.com/questions/7568899/does-selenium-support-headless-browser-testing), sin ninguna visualización. –

+0

@stav Aunque parece que no hay soporte oficial para ejecutar selenio sin cabeza, puede usar xvfb, que es como/dev/null y absorbe toda la pantalla. Este primer resultado en google debería ayudar http://www.alittlemadness.com/2008/03/05/running-selenium-headless/ – pranavk

6

He tenido exactamente el mismo problema. No es simple en absoluto, pero finalmente encontré una gran solución, usando PyQt4.QtWebKit.

Encontrará las explicaciones sobre esta página web: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/

Lo he probado, que actualmente lo uso, y eso es genial!

Su gran ventaja es que puede ejecutarse en un servidor, solo con X, sin un entorno gráfico.

6

En realidad, sugeriría usar Selenium. Está diseñado principalmente para probar aplicaciones web desde una "perspectiva del usuario", sin embargo, es básicamente un controlador "FireFox". Lo he usado para este propósito ... aunque estaba escaneando una página web dinámica de AJAX. Siempre y cuando el formulario de Javascript tiene un reconocible "Anchor Text" que el selenio puede "clic" todo debe ponerse en orden.

Espero que ayude

5

Usted debe mirar en el uso Ghost, una biblioteca de Python que envuelve el + WebKit truco PyQt4.

Esto hace g el cliente WebKit:

import ghost 
g = ghost.Ghost() 

Puede tomar una página con g.open(url) y luego g.content evaluará el documento en su estado actual.

Ghost tiene otras características interesantes, como la inyección de JS y algunos métodos de llenado de formularios, y puede pasar el documento resultante a BeautifulSoup y así sucesivamente: soup = bs4.BeautifulSoup(g.content).

Hasta ahora, Ghost es lo único que he encontrado que hace que este tipo de cosas sean fáciles en Python. La única limitación que me he encontrado es que no puedes crear fácilmente más de una instancia del objeto cliente, ghost.Ghost, pero podrías evitarlo.

7

escribí un pequeño tutorial sobre este tema, esto podría ayudar:

http://koaning.io/dynamic-scraping-with-python.html

Básicamente lo que se hace es que tiene la biblioteca de selenio pretender que es un navegador Firefox, el navegador va a esperar hasta que todos javascript se ha cargado antes de que continúe pasándole la cadena html. Una vez que tenga esta cadena, puede analizarla con beautifulsoup.

+0

puede el navegador "desplazarse" porque cuando el usuario se desplaza, obliga a la carga lenta a cargar más cosas . – CodeGuru

+0

No conozco los comandos de python. pero encontré esto de una pregunta de Java; http://stackoverflow.com/questions/9443067/scrolling-using-selenium-webdriver – cantdutchthis

+1

¡Gracias, tutorial muy útil! – Jessica

Cuestiones relacionadas