2008-10-15 13 views
12

¿Cuál es el mejor método para rozar un sitio web dinámico donde la mayoría del contenido se genera mediante lo que parecen ser solicitudes de AJAX? Tengo experiencia previa con un combo Mechanize, BeautifulSoup y Python, pero estoy preparado para algo nuevo.Raspe un sitio web dinámico

- Editar - Para más detalles: Estoy tratando de raspar la CNN primary database. Hay una gran cantidad de información allí, pero no parece haber una API.

Respuesta

7

Este es un problema difícil porque tiene que realizar una ingeniería inversa del javascript por sitio, o implementar un motor de JavaScript y ejecutar los scripts (que tiene sus propias dificultades y riesgos).

Es una solución pesada, pero he visto gente haciendo esto con scripts de greasemonkey: permite que Firefox represente todo y ejecute el javascript, y luego raspe los elementos. Incluso puede iniciar acciones de usuario en la página si es necesario.

-Adam

3

consejo de Adam Davis es sólido.

Además, le sugiero que intente realizar una "ingeniería inversa" de lo que JavaScript está haciendo, y en lugar de tratar de rozar la página, emite las solicitudes HTTP que emite JavaScript e interpreta los resultados usted mismo (probablemente en formato JSON, agradable y fácil de analizar). Esta estrategia puede ser desde una pesadilla trivial a una total, dependiendo de la complejidad de JavaScript.

La mejor posibilidad, por supuesto, sería convencer a los responsables del sitio web de implementar una API amigable para los desarrolladores. Todos los chicos geniales lo están haciendo en estos días 8-). Por supuesto, es posible que no quieran que sus datos sean raspados de manera automatizada ... en cuyo caso se puede esperar un juego del gato y el ratón para hacer que su página sea cada vez más difícil de raspar. :-(

0

Parece que es un problema bastante común. Me pregunto por qué alguien no ha desarrollado un navegador programático. Estoy imaginando un Firefox que puede llamar desde la línea de comando con una URL como argumento y se carga la página, ejecutar todos los eventos iniciales JS carga de la página y guardar el archivo resultante.

me refiero a Firefox, y otros navegadores ya lo hacen, por qué no podemos simplemente quitarse el material de interfaz de usuario?

+2

personas han hecho esto con webkit, por ejemplo aquí: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/comment-page- 1 – hoju

4

Se IDE de lenium, una herramienta para probar, es algo que he usado para raspar la pantalla. Hay algunas cosas que no maneja bien (ventanas de Javascript.alert() y ventanas emergentes en general), pero hace su trabajo en una página activando los eventos de clic y escribiendo en los cuadros de texto. Debido a que la porción IDE se ejecuta en Firefox, no tienes que hacer toda la administración de las sesiones, etc. ya que Firefox se ocupa de ello. El IDE graba y reproduce las pruebas.

También exporta código C#, PHP, Java, etc. para compilar pruebas/raspadores compilados que se ejecutan en el servidor Selenium. Lo he hecho para más de algunas de mis secuencias de comandos de Selenium, lo que hace que almacenar datos recortados en una base de datos sea mucho más fácil.

Los scripts son bastante sencillos de escribir y modificar, y se componen de cosas como ("clickAndWait", "submitButton"). Vale la pena ver lo que describes.

7

La mejor solución que encontré fue usar Firebug para monitorear XmlHttpRequests, y luego usar una secuencia de comandos para reenviarlos.

1

Probablemente la forma más fácil es usar el control del navegador web IE en C# (o en cualquier otro idioma).Usted tiene acceso a todas las cosas dentro del navegador de forma inmediata + no necesita preocuparse por las cookies, SSL, etc.

2

Hay una pequeña curva de aprendizaje, pero herramientas como Pamie (Python) o Watir (Ruby) te permitirán conectarte al navegador web de IE y conocer los elementos. Esto resulta ser más fácil que Mechanize y otras herramientas de nivel HTTP, ya que no tiene que emular el navegador, solo le pide al navegador los elementos html. Y va a ser mucho más fácil que la ingeniería inversa de las llamadas de Javascript/Ajax. Si es necesario, también puede usar herramientas como una hermosa sopa junto con Pamie.

1

encontré que el control IE Webbrowser tiene todo tipo de peculiaridades y soluciones que justificarían un software de alta calidad para encargarse de todas esas incoherencias, en capas alrededor de la API shvwdoc.dll y mshtml y proporcionar un marco.

0

La primera pregunta que tengo: ¿puedes confirmar que el sitio no funciona en absoluto sin Javascript? Te sorprendería cuántos sitios todavía se pueden usar si desactivas JavaScript. Probablemente te dirijan a un conjunto de URL ligeramente diferente.

Cuestiones relacionadas