Scraping entregue html que ve el navegador y no el código fuente

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Dseda
Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola perdonen si la pregunta esta confusa.

cuando tu abres un navegador por ejemplo google chrome e inspeccionas el elemento de la pagina veras que el html que te muestra es mas completo que el código fuente. esto sucede por que el navegador ya a ejecutado los javascript de la pagina que estamos viendo y muestra partes adicionales de html que estaban ocultos por una ejecución javascript.

desde php con curl o file_get_contents, se obtiene solo el código fuente de la pagina.

slimerjs es un navegador de secuencias de comandos para los desarrolladores web y con esto si podemos obtener el html que ve el navegador tras haber ejecutado sus javascript, pero para que funcione este debe estar instalado Firefox y tras cada ejecución este abre una ventana visual del navegador de firefox, y ya que necesito realizar este proceso desde mi servidor no veo la manera como podría hacerlo.


entonces me preguntaba si existe algún lenguaje o librería que ejecute el javascript de la pagina de destino y me entregue su código fuente resultante, tal como slimerjs pero que no necesite de tener instalado ningún navegador y asi lo pueda ejecutar desde mi servidor sin ningún problema.

agradezco cualquier información [MENTION=9679]cicklow[/MENTION] , [MENTION=108344]aperpen[/MENTION] , [MENTION=8317]lombervid[/MENTION]
gracias y por favor perdonar cualquier tipo de molestia causada 😉
 
phantomjs tiene tremendo potencial, yo lo uso con python y es excelente!
 

phantomjs tiene tremendo potencial, yo lo uso con python y es excelente!
yo intente el ejemplo de Get the content (text) of an URL after Javascript has run with PHP - Stack Overflow

1) cree una carpeta phantomjs dentro de mi servidor local y dentro de esa carpeta le puse el ejecutable de phantomjs
2) en esta misma carpeta cree un archivo get-website.php con esto
PHP:
<?php

    $phantom_script= dirname(__FILE__). '/get-website.js'; 


    $response =  exec ('phantomjs ' . $phantom_script);

    echo  htmlspecialchars($response);
    ?>
3) en esta misma carpeta cree un archivo get-website.js con esto
PHP:
var webPage = require('webpage');
var page = webPage.create();

page.open('http://google.com/', function(status) {
 console.log(page.content);
  phantom.exit();
});
y luego ejecute el get-website.php pero me imprime esto imagen
HTML:
</script></div><table cellspacing="0" cellpadding="0" class="gstl_0 gssb_c" style="width: 510px; display: none; top: 244px; left: 4px; position: absolute;"><tbody><tr><td class="gssb_f"></td><td class="gssb_e" style="width: 100%;"></td></tr></tbody></table></body></html>
no imprime lo deseado que es todo el código después de la ejecución del javascript, osea el mismo código que me muestre el inspeccionar elemento.

ya que trabajas con phantomjs podrías darme una ayudita en que esta mal? gracias
 
Última edición:
Phantom.JS se usa para sitios hechos con librerías MV* como Angular.JS backbone.JS entre otrod

Enviado desde mi SM-J105B mediante Tapatalk
 
estoy intentando instalar php-phantomjs
PHP PhantomJS
pero no lo e logrado alguien puede compartir una guia rápida?
 
Yo igual uso phantonjs con python y elixir y va a la primera.
 
Yo igual uso phantonjs con python y elixir y va a la primera.

lo que pasa es que para un novato como yo acostumbrado al php e imprimir todo por curl desde el navegador manejar comando me esta atrope-llenado, y solo e logrado hacer unas pruebas con phantonjs pero me gustaria utilizar php-phantomjs que es un repositorio que en teoria interactuaria phantonjs con php o almenos eso creo
 
No uses binding o ports como php-phantonjs o similares.
Te planteo 2 opciones:

  1. Puedes usar php y ejecutar el/los comando(s) en segundo plano. (Usando PHP exec/shell)
  2. Desarrollas un pequeño y simple servicio web que se encargue de procesar por ti el scrapping, y te devuelva el resultado.

En get-website.js debes evaluar que la página cargo correctamente y darle un setTimeout siempre que vayas a esperar que se ejecute Javascript.
 
lo que pasa es que para un novato como yo acostumbrado al php e imprimir todo por curl desde el navegador manejar comando me esta atrope-llenado, y solo e logrado hacer unas pruebas con phantonjs pero me gustaria utilizar php-phantomjs que es un repositorio que en teoria interactuaria phantonjs con php o almenos eso creo

Aprovecha y aprende otro lenguaje, últimamente todos mis scrappers los ando portando a Elixir 🙂 y va mucho mas rápido

https://github.com/HashNuke/hound

Algo que tiene PhantonJS es que lo puedes ejecutar como servicio, puedes tener varios phantjonJS como servicio en varios servidores web con distintas IPS y pues hacer round robin para tus scrappers es algo que suelo hacer para hacer scrapping masivo y funciona bien.
 
Última edición:
Atrás
Arriba