2

我知道如何使用 php 从外部网站提取 html 内容并对其进行解析,但问题是我要提取的内容是由 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");
4

2 回答 2

1

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

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

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

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

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

于 2012-12-01T04:03:26.590 回答
0

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

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

使用 PhantomJS - http://phantomjs.org/很容易做到这一点。

您将必须准备将加载页面的 javascript 文件,必要时模拟用户输入,查看 DOM 信息并使用 PhantomJS 文件 api 将结果保存在某处,然后在 PHP 中加载结果。您可以从示例开始 - 看看https://github.com/ariya/phantomjs/blob/master/examples/pizza.js

于 2012-12-01T04:24:58.653 回答