网页抓取以提取美元价格

时间:2015-11-05 12:36:34

标签: php screen-scraping

我使用简单的dom解析器(php)从以下位置提取美元价格: http://www.lanacion.com.ar/dolar-tarjeta-t50462

<div class="numero floatFix">
     <p class="peso">$</p>
     <p id="dTarjeta" class="valor x35">
         12,920
     </p>

但我得到了跟随角色&#34; - &#34;而不是&#34; 12,290&#34;。我使用的代码是:

$url_to_traverse = 'http://www.lanacion.com.ar/dolar-tarjeta-t50462';
$html = file_get_html($url_to_traverse);
foreach($html->find('#dTarjeta') as $element)
{
   var_dump($element->text());
}

我做错了什么? 希望有一个解决方案因为我尝试了很多库...

1 个答案:

答案 0 :(得分:1)

这是因为,#dTarjeta中的数据是在页面加载后使用javascript提供的。即,当file_get_html函数读取url时,thsi就是它的样子:

    <p id="dTarjeta" class="valor x35">-</p>

很明显,在加载页面后,#dTarjeta中的文本使用javascript使用ajax调用或类似的东西进行更改(Havent选中它)。

因此,您的问题的答案是,您获得了正确的输出,因为PHP无法使用客户端javascript呈现页面,并且它只呈现服务器首先发送的内容。

我建议您使用Phantomjs或simialr技术来抓取这些类型的页面。

使用以下命令验证:view-source:http://www.lanacion.com.ar/dolar-tarjeta-t50462

此外,您可以使用此stackoverflow问题:Scrape web pages in real time with Node.js 以供参考。

另外,如果您希望使用其他来源获取货币值,请考虑使用

  1. http://fixer.io/ - 免费的JSON API。
  2. https://openexchangerates.org/ - 相同
  3. Yahoo Finance API
  4. 此链接将帮助您使用PHP处理JSON API。 Get data from JSON file with PHP