Php 从javascript生成的外部网站中提取内容

Php 从javascript生成的外部网站中提取内容,php,javascript,parsing,Php,Javascript,Parsing,我知道如何使用php从外部网站提取html内容并对其进行解析,但问题是我要提取的内容是由javascript函数生成的 代码如下所示: <div align="left"> <div id="divCotizaciones"></div> <script type="text/javascript"> getCotizaciones("cotizaciones_busca.dat"); </scri

我知道如何使用php从外部网站提取html内容并对其进行解析,但问题是我要提取的内容是由javascript函数生成的

代码如下所示:

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

不幸的是,您不能使用DOM或任何其他加载外部源(例如get_file、curl等)的PHP函数来执行JavaScript代码。你需要JavaScript编译器,或者一种编程语言需要一个插件来编译JavScript(例如C++上的WebKit),PHP没有这种支持

但是,您可以做的是查看数据是如何在浏览器中生成的,以及它是如何显示该数据的。我为你们做了这些,发现网格是通过向不同的URL发出请求而生成的。因此,不要调用
'http://www.bvl.com.pe/neg_rv_alfa.html#“
调用JavaScript函数
getCotizaciones(“cotizaciones_busca.dat”)
使用ajax依次调用此URL

此url是您需要的数据,您可以通过DOM或其他方式加载它>


Protip:为您选择的浏览器使用firebug或任何开发工具控制台。无论何时看到ajax请求,都要查看它做了什么,它在哪里发出请求,以及参数是什么。检查存储函数的js文件的源代码。看看它能做什么。在您的实例中
http://www.bvl.com.pe/js/cabecera_pie.js
您将看到它根据用户单击的内容调用ajax请求。在domload之前在phpb中复制它,等等

我认为只使用PHP是不可能的

但您可以在单独的进程中运行浏览器,让它加载页面并执行javascript,然后您可以获取结果

使用PhantomJS-很容易做到这一点


您必须准备javascript文件来加载页面,必要时模拟用户输入,查看DOM信息并使用PhantomJS文件api将结果保存在某处,然后在PHP中加载结果。您可以从示例开始—看看

您将需要一个javascript引擎,如:或。
$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");