2
2

Estoy escribiendo una aplicación Django que necesita recuperar páginas webs externas y parsearlas para extraer información. Para procesar el HTML utilizo BeautifulSoup, el problema está en que muchas páginas usan Javascript que altera el HTML, y en estos casos no se puede extraer la información estática que se recupera con la petición original.

Estoy buscando una solución que permita ejecutar ese javascript y ver los cambios en el HTML. En principio asumo que hará falta un navegador web que interprete todo el javascript y realice las llamadas AJAX, y que se controle desde Python.

Las mejores opciones por ahora parecen ser:

  • Selenium. La ventaja es que tiene interfaz desde Python, pero por contra hay que ejecutar un navegador en un entorno gráfico.
  • PhantomJS. Justo al contrario, se ejecuta sin entorno gráfico pero habría que escribir un sistema de control desde Python.

preguntado 29 Ene '12, 13:21

haplo's gravatar image

haplo
4.8k24566
Aceptadas: 71%


La opción de Selenium es la más adecuada, sobre entornos Linux no necesita realmente un entorno gráfico, sinó algo que lo emule. Dále un vistazo al proyecto SST (http://testutils.org/sst/), ha desarrollado una capa sobre Selenium que te permite automatizar las tareas de una manera realmente sencilla.

SST está pensado para tests, pero al ser un script Python puedes utilizarlo y modificarlo según tus necesidades. La documentación de instalación ya te indica los paquetes a instalar para ejecutarlo sin componente gráfica.

Al estar basado en Selenium realmente ejecuta el navegador, por lo que no deberías tener problemas con el HTML generado por el Javascript, aunque a veces es un poco problemático ajustar tiempos de espera para que te dé el resultado esperado.

enlace permanente

respondido 29 Ene '12, 18:02

aaloy's gravatar image

aaloy
541109
Aceptadas: 85%

¿Alguna idea de cómo emular las X? O en otras palabras, arrancar Firefox sin tener entorno gráfico (léase en un servidor).

(29 Ene '12, 18:15) haplo
2

Puedes arrancar la aplicación en un framebuffer virtual, Xvfb te permite esto.

http://en.wikipedia.org/wiki/Xvfb

Lo tienes disponible en debian/Ubuntu con ese nombre de paquete, xvfb Eso si, ten en cuenta que la aplicación se ejecuta en segundo plano, no verás la ventana (lógicamente).

(29 Ene '12, 19:15) joe di castro ♦♦

No he probado ninguna de estas opciones, pero en la línea de Selenium tienes también Windmill.

Otra opción podría ser Spynner, que permite implementar una navegador web sin GUI

enlace permanente

respondido 29 Ene '12, 18:54

joe%20di%20castro's gravatar image

joe di castro ♦♦
2.4k265075
Aceptadas: 40%

Tu respuesta
Activar/desactivar vista previa

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Trucos del editor

  • *italic* or __italic__
  • **negrita** o __negrita__
  • enlace:
    [texto](http://url.com/ "Pregunta")
  • imagen:
    ![alt texto](/path/img.jpg "Pregunta")
  • lista numerada:
    1. Foo
    2. Bar
  • Código:
    • Dentro de un parrafo:
      `codigo`
    • Fragmento de código:
      Selecciona el texto y usa el botón del icono de ceros y unos
  • Resaltado de sintaxis:
    Hay dos maneras de hacerlo:
    • La 1ª línea es un Shebang #!/usr/bin/env python
    • La 1ª línea es un lexer
      :::python

      Algunos lexer validos:
      :::python
      :::django
      :::css+django
      :::html+django
      :::console
      :::pycon
  • Para añadir un salto de línea simplemente deja una línea en blanco entre parrafos
  • se permite código HTML básico

Etiquetas de la pregunta:

×6
×5
×1
×1

pregunta realizada: 29 Ene '12, 13:21

pregunta vista: 866 veces

última modificación: 29 Ene '12, 19:43