вытягивать контент с внешнего веб-сайта, созданного с помощью javascript

Я знаю, как вытащить html-контент с внешнего сайта с помощью php и проанализировать его, но проблема в том, что содержимое, которое я хочу извлечь, генерируется функцией javascript.

Код выглядит так:

<div align="left"> <div id="divCotizaciones"></div> <script type="text/javascript"> getCotizaciones("cotizaciones_busca.dat"); </script> </div> 

Я хотел бы извлечь весь контент, созданный этой функцией. Это веб-страница, откуда я пытаюсь загрузить контент: http://www.bvl.com.pe/neg_rv_alfa.html#

Я пробовал это, но он не работает:

 $html = new DOMDocument(); $html->loadHtmlFile('http://www.bvl.com.pe/neg_rv_alfa.html#'); $xpath = new DOMXPath($html); $nodelist = $xpath->query('//*[@id="div"]/div[4]'); echo $output = $nodelist->item(0)->nodeValue; // and this is the output I get: getCotizaciones("cotizaciones_busca.dat"); 

К сожалению, вы не можете выполнить код JavaScript, используя DOM или любую другую функцию PHP, которая загружает внешние источники, например get_file, curl, ect. Вам нужен компилятор JavaScript, или для языка программирования нужен плагин для компиляции JavScript (например, WebKit на C ++). PHP не имеет такой поддержки.

Однако вы можете увидеть, как данные генерируются в браузере и как они отображают эти данные. Я сделал это для вас и выяснил, что сетка генерируется путем запроса на другой URL-адрес. Поэтому вместо вызова 'http://www.bvl.com.pe/neg_rv_alfa.html#' который вызывает функцию JavaScript getCotizaciones("cotizaciones_busca.dat"); который, в свою очередь, вызывает этот URL-адрес с помощью ajax.

http://www.bvl.com.pe/includes/cotizaciones_busca.dat

этот url – это данные, которые вам нужны, и вы загружаете их через DOM или что-то еще>

Protip : используйте firebug или любую консоль разработчика для браузера по вашему выбору. когда вы видите запрос ajax, смотрите, что он делает, где он делает запрос и какие параметры. Проверьте источник js-файла, где хранится функция. Посмотрите, что он делает. В вашем случае http://www.bvl.com.pe/js/cabecera_pie.js и вы увидите его вызов ajax-запроса в зависимости от того, что пользователь нажал. повторите это в phpb до domload и т. д.

Я не думаю, что можно использовать только PHP.

Но вы можете запускать браузер в отдельном процессе, загружать ли он страницу и выполнять javascript, а затем вы можете получить результаты.

Это довольно легко сделать, используя PhantomJS – http://phantomjs.org/ .

Вам нужно будет подготовить файл javascript, который загрузит страницу, при необходимости смоделирует ввод пользователя, заглянет в DOM и сохранит результаты где-нибудь с помощью файла APT PhantomJS, а затем загрузит результаты на PHP. Вы можете начать с примеров – взгляните на https://github.com/ariya/phantomjs/blob/master/examples/pizza.js