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

时间:2012-12-01 03:52:12

标签: php javascript parsing

我知道如何使用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");

2 个答案:

答案 0 :(得分:1)

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

但是,您可以做的是查看数据在浏览器中的生成方式以及它如何显示该数据。我为你做了这件事,发现通过向不同的URL发出请求生成了网格。因此,而不是调用调用JavaScript函数'http://www.bvl.com.pe/neg_rv_alfa.html#'的{​​{1}},后者又使用ajax调用此URL。

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

此网址是您需要的数据,您可以通过DOM或其​​他任何&gt;

加载它

Protip :对您选择的浏览器使用firebug或任何开发工具控制台。每当你看到ajax请求时,看看它做了什么,它在哪里发出请求,以及什么是参数。检查存储函数的js文件的来源。看看它做了什么。在您的实例getCotizaciones("cotizaciones_busca.dat");中,您将看到它根据用户点击的内容调用ajax请求。在domload等之前在phpb中复制它

答案 1 :(得分:0)

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

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

使用PhantomJS很容易做到 - http://phantomjs.org/

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

相关问题