2009-05-13 18 views
17

Se me ha pedido que escriba una aplicación que rastrea la información de una página web de Intranet y presenta cierta información en un formato fácil de ver. La página web es un verdadero desastre y requiere que el usuario haga clic en media docena de iconos para descubrir si un artículo pedido ha llegado o ha sido recibido. Como se puede imaginar, a los usuarios les resulta irritante, por decir lo menos, y sería bueno tener una aplicación que cualquiera pueda usar que enumere el estado de sus pedidos en una sola pantalla.Screen Scraping desde una página web con mucho Javascript

Sí, sé que una mejor solución sería volver a escribir la aplicación web, pero eso implicaría llamar al proveedor y nos costaría una fortuna pequeña.

De todos modos, al analizar esto, descubrí que la página web que quiero raspar es en su mayoría Javascript (aunque no utiliza ninguna técnica AJAX). ¿Alguien sabe si existe una biblioteca o un programa que podría alimentar con el Javascript y que luego escupiría el DOM de mi aplicación para analizar?

Casi puedo escribir la aplicación en cualquier idioma, pero mi preferencia sería JavaFX solo para poder jugar con ella.

Gracias por su tiempo.

Ian

+6

ahhhhh ... Me encanta el olor de recién HTML pantalla-raspado de la mañana .... –

+0

Comprobar este post selenio http://stackoverflow.com/questions/125177/whats -a-good-tool-to-screen-scrape-with-javascript-support – osager

Respuesta

8

Puede considerar el uso de HTMLunit Es una biblioteca de clases Java creada para automatizar la exploración sin tener que controlar un navegador, e integra el motor de JavaScript de Mozilla Rhino para procesar javascript en las páginas que carga. También hay un envoltorio JRuby para eso, llamado Celerity. Su soporte javascript no es realmente perfecto en este momento, pero si sus páginas no usan muchos hacks las cosas deberían funcionar bien, el rendimiento debería ser mucho mejor que controlar un navegador. Además, no tiene que preocuparse por la persistencia de las cookies una vez finalizado su raspado y todas las demás cosas desagradables relacionadas con el control de un navegador (historial, autocompletado, archivos temporales, etc.).

1

me gustaría ir con Win32::IE::Mechanize de la cual le permite automatizar Internet Explorer Perl. Debería poder hacer clic en los íconos y extraer texto mientras deja que MSIE haga las molestas tareas de procesar todos los JS.

+0

¡Me gusta Perl pero esta aplicación web no es compatible con IE! Por lo que me dicen, solo es Firefox y Safari. – IanW

5

Como dices que no se usa AJAX, toda la información está presente en la fuente HTML. El javascript simplemente lo renderiza en función de los clics del usuario. Por lo tanto, debe realizar una ingeniería inversa de la forma en que funciona la aplicación, analizar el html y el código de JavaScript y extraer la información útil. El análisis de texto es estrictamente empresarial, no debe tratarse de ejecutar javascript y producir un nuevo DOM. Esto sería mucho más difícil de hacer.

Si se usó AJAX, su trabajo sería más fácil. Puede averiguar fácilmente cómo funcionan los servicios AJAX (probablemente al recibir JSON y XML) y extraer la información.

+1

Gracias por su respuesta. Acabo de ver la fuente JS y HTML de la aplicación web y hay algunas llamadas AJAX que no había notado antes. – IanW

1

Estoy de acuerdo con kgiannakakis' answer. Me sorprendería que no pudieras aplicar ingeniería inversa al javascript para identificar de dónde proviene la información y luego escribir algunos scripts simples de Python usando Urllib2 y the Beautiful Soup library para raspar la misma información.

Si Python y raspado son una idea nueva, hay algunos excelentes tutorials disponibles sobre cómo comenzar.

[Editar] Parece que hay a Python version of mechanize también. ¡Es hora de volver a escribir algunos rascadores que desarrollé hace un tiempo! :-)

4

Podría considerar utilizar un JS de engrasemonkey.greasemonkey es un complemento de Firefox muy poderoso que te permite ejecutar tu propio script junto con sitios web específicos. Esto le permite modificar la forma en que se muestra el sitio web, agregar o eliminar contenido. Incluso puede usarlo para realizar búsquedas de estilo AJAX y agregar contenido dinámico.

Si su herramienta es para uso doméstico, y los usuarios están encantados de usar Firefox, este podría ser un ganador.

Saludos

+0

Gracias Greasemonkey se ve bien No había oído hablar de él antes. Lamentablemente, algunos de mis usuarios no pueden instalar agregar a su instalación de Firefox, así que no creo que pueda usarlo. – IanW

2

que sugieren IRobotSoft rascador web. Es un software libre dedicado para raspar la pantalla con el mejor soporte de JavaScript. Puede crear y probar un robot con su interfaz visual. También puede incrustarlo en su propia aplicación utilizando su control ActiveX y ocultar la ventana del navegador.

1

he creado un proyecto que utiliza site2archivePhantomJS para rendir incluyendo JS cosas y wget para raspar. phantomJs se basa en Webkit, que ofrece un entorno de navegación similar a Safari y Google Chrome.

Cuestiones relacionadas