php javascript dynamic html-parser

php - Regar los datos generados por javascript en el lado del servidor de páginas webs.aspx



dynamic html-parser (2)

Tienes que mirar a PhantomJS .

Desde su sitio:

PhantomJS es un WebKit sin cabeza con JavaScript API. Tiene soporte rápido y nativo para varios estándares web: manejo de DOM, selector de CSS, JSON, Canvas y SVG.

Al utilizar la API, puede crear una secuencia de comandos del "navegador" para interactuar con esa página y eliminar los datos que necesita. A continuación, puede hacer lo que necesite con él; incluyendo pasarlo a un script PHP si es necesario.

Dicho esto, si es posible intente no "raspar" los datos. Si hay una llamada ajax que está haciendo la página, ¿tal vez hay una API que puede usar en su lugar? Si no, tal vez puedas convencerlos para que hagan uno. Eso, por supuesto, sería mucho más fácil y más fácil de mantener que el raspado de pantalla.

Mi pregunta es: cómo recopilar información de este sitio web http://vtis.vn/index.aspx. Pero los datos no se muestran hasta que haces clic, por ejemplo, en "Danh sách chậm". Lo he intentado muy bien y con cuidado, cuando haces clic en "Danh sách chậm", este es un evento en línea que activa algunas funciones javascript una de las funciones js es obtener los datos del servidor e insertarlos en un marcador / marcador de posición y en En este punto puede usar algo como Firefox para examinar los datos y sí, los datos se muestran a los usuarios / espectadores en la página web. Entonces, de nuevo, ¿cómo podemos eliminar esta información programáticamente?

Escribí una función de desguace pero, por supuesto, no obtiene los datos que quiero porque los datos no están disponibles hasta que hago clic en el botón "Danh sách chậm".

<?php $Page = file_get_contents(''http://vtis.vn/index.aspx''); $dom_document = new DOMDocument(); $dom_document->loadHTML($Page); $dom_xpath_admin = new DOMXpath($dom_document_admin); $elements = $dom_xpath->query("*//td[@class=''IconMenuColumn'']"); // foreach ($elements as $element) { $nodes = $element->childNodes; foreach ($nodes as $node) { echo (mb_convert_encoding($node->c14n(), ''iso-8859-1'', mb_detect_encoding($content, ''UTF-8'', true))); } } }

Gracias amablemente, StackOverflow es un gran lugar. RE.


Primero, necesitas PhantomJS:

Segundo, necesitas PHP phantomjs:

  1. instale el compositor (si no existe en su servidor)
  2. paquete de instalación (PHP phantomjs), puede echarle un vistazo a esta guía:

https://github.com/jonnnnyw/php-phantomjs http://jonnnnyw.github.io/php-phantomjs/4.0/2-installation/

En tercer lugar, cargue el paquete en su secuencia de comandos: require (''vendor / autoload.php'');

Finalmente, en lugar de file_get_content, cargará la página a través de phantomjs

$client = Client::getInstance(); $client->getEngine()->setPath(''/usr/local/bin/phantomjs''); $client = Client::getInstance(); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $request->setMethod(''GET''); $request->setUrl(''https://www.your_page_embeded_ajax_request''); $client->send($request, $response); if($response->getStatus() === 200) { echo "Do something here"; }