Me encontré con una antigua aplicación con WinForms que obtene el código fuente de una página para realizar parsing y extraer data de web externas para usarlas en la aplicación.
El problema está en que con las nuevas tecnologías basadas en frameworks Javascript como Angular y similares, en el código fuente ya no viene el dato, sino que te encuentras con campos como estos
<span class="hour">{{data.departure.hour.formatted}}</span>
en donde debería ir la hora de despegue.
Necesitamos capturar esos datos, alguien tiene una estrategia para proceder?
En el ejemplo, usé
http://www.despegar.cl/shop/flights/results/oneway/ANF/SCL/2016-02-28/1/0/0?from=SB
De ahí debemos capturar los horarios de salida, diariamente.
Cualquier script montado sobre phantomJS (http://phantomjs.org/) te debería valer. Es un "empaquetado" de webkit que te permitirá acceder al DOM de la página ya renderizada. Mira los ejemplos, es fácil de implementar si tenéis experiencia en crawler estáticos tal y como entiendo de tu mensaje.
Gracias, seguí tu consejo con phantomJS y mirando los ejemplos me hice mi web scraple. Lo único que me falta es programar un cron que llame a este proceso phantom. (una vez al dia). Tienes alguna idea como se puede hacer?
Me alegro que te fuera de utilidad esa librería, es uno proyecto realmente interesante que merece la pena conocer.
En cuanto a tu pregunta, puedes hacerlo por la vía fácil. Pongo varios sistemas operativos porque no indicas cual estás usando (y puede ser útil para otro compañero que entre en el foro)
- Linux: Una tarea cron de toda la vida (http://blog.desdelinux.net/cron-crontab-explicados/)
- OSX: Te recomendaría usar launchd (https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html)
- Windows: TaskScheduler (Aquí te puedo ayudar poco, pero todo se hace a golpe de click, no es complejo) (http://windows.microsoft.com/es-es/windows/schedule-task#1TC=windows-7)
Y ya que estamos en el foro de javascript, la forma que yo usaría.
Supongo que todo lo que estás montando es parte de otro sistema que tendrá otro tipo de funcionalidades, no se, comparar datos de diferentes servicios, enviar correos con actualizaciones, o cualquier cosa que tengáis entre manos. Mi implementación de todo esto, la haría sobre nodejs, puesto que puedes seguir usando phantomJS (la lógica la tienes implementada) y puedes tener una seria de ventajas añadidas para un futuro. Si has instalado correctamente phantomJS no tendrás problemas para empezar con node.
Si eliges esta vía, necesitarás el módulo agenda (https://www.npmjs.com/package/agenda), phantomjs-prebuilt (https://www.npmjs.com/package/phantomjs-prebuilt) y mongodb instalado.
Te dejo un ejemplo muy sencillo por si quieres empezar a hacer pruebas, simplemente te hace una captura de pantalla de https://www.reddit.com/ cada 5 minutos. Puedes dejarlo funcionando con forever (https://www.npmjs.com/package/forever) y te olvidas.
El problema está en que con las nuevas tecnologías basadas en frameworks Javascript como Angular y similares, en el código fuente ya no viene el dato, sino que te encuentras con campos como estos
<span class="hour">{{data.departure.hour.formatted}}</span>
en donde debería ir la hora de despegue.
Necesitamos capturar esos datos, alguien tiene una estrategia para proceder?
En el ejemplo, usé
http://www.despegar.cl/shop/flights/results/oneway/ANF/SCL/2016-02-28/1/0/0?from=SB
De ahí debemos capturar los horarios de salida, diariamente.
21/02/2016 21:43
27/02/2016 04:13
27/02/2016 11:25
En cuanto a tu pregunta, puedes hacerlo por la vía fácil. Pongo varios sistemas operativos porque no indicas cual estás usando (y puede ser útil para otro compañero que entre en el foro)
- Linux: Una tarea cron de toda la vida (http://blog.desdelinux.net/cron-crontab-explicados/)
- OSX: Te recomendaría usar launchd (https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html)
- Windows: TaskScheduler (Aquí te puedo ayudar poco, pero todo se hace a golpe de click, no es complejo) (http://windows.microsoft.com/es-es/windows/schedule-task#1TC=windows-7)
Y ya que estamos en el foro de javascript, la forma que yo usaría.
Supongo que todo lo que estás montando es parte de otro sistema que tendrá otro tipo de funcionalidades, no se, comparar datos de diferentes servicios, enviar correos con actualizaciones, o cualquier cosa que tengáis entre manos. Mi implementación de todo esto, la haría sobre nodejs, puesto que puedes seguir usando phantomJS (la lógica la tienes implementada) y puedes tener una seria de ventajas añadidas para un futuro. Si has instalado correctamente phantomJS no tendrás problemas para empezar con node.
Si eliges esta vía, necesitarás el módulo agenda (https://www.npmjs.com/package/agenda), phantomjs-prebuilt (https://www.npmjs.com/package/phantomjs-prebuilt) y mongodb instalado.
Te dejo un ejemplo muy sencillo por si quieres empezar a hacer pruebas, simplemente te hace una captura de pantalla de https://www.reddit.com/ cada 5 minutos. Puedes dejarlo funcionando con forever (https://www.npmjs.com/package/forever) y te olvidas.
https://gist.github.com/aperezl/4db16a568d84990db2a1
Ahora te toca a tí elegir un método u otro e implementar tu lógica. Suerte.