Я знаю, как вытащить 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