PHP curl从网站返回空数组的数据

时间:2015-11-10 08:36:47

标签: php curl domdocument simple-html-dom

我正在尝试编写一个Php脚本,以便从www.snowbird.com/mountain-report/中提取雪和其他数据,以便通过LED数组显示。我在获取所需数据方面遇到了麻烦。我似乎无法找到一种方法使其工作。我是否能够完成这项工作,还是我必须使用不同的语言?

以下代码仅返回空。在代码之后,我将发布返回的内容。

<?php
require('simple_html_dom.php');

$ch = curl_init("http://www.snowbird.com/mountain-report/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

$html = new simple_html_dom(); 
$html->load($content);

$ret1 = $html->find('.snowfall-total');
print_r ($ret1);
$ret2 = $html->find('#twenty-four-hour');
print_r ($ret2);
$ret3 = $html->find('#forty-eight-hour');
print_r ($ret3);
$ret4 = $html->find('#current-depth');
print_r ($ret4);
$ret5 = $html->find('#year-to-date');
print_r ($ret5);
?>

这是输出

pi@KPi /var/www $php test4.php

Array
(
)
Array
(
)
Array
(
)
Array
(
)
Array
(
)

3 个答案:

答案 0 :(得分:2)

您正在加载的网址正在返回一个网页:html。

所以当你把它当作json字符串处理时:

$content = json_decode($content, true);

您将$content设置为null,因为json_decode()无法解码字符串/输入无效json时返回的内容。

如果他们有一个返回json的api,你可以使用它,否则你可以省略json_decode行并从那里拿走它。

答案 1 :(得分:2)

您尝试请求的网站在使用cURL时会抛出错误,因为他们在python代码中实现的Google工具在没有设置用户代理时会崩溃。

尝试在curl_exec($ch)

之前将此行添加到您的代码中

curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

正如@jeroen所说,使用json_decode($content, true)不是必需的,因为返回的数据将是HTML代码而不是json字符串。删除该行也应该很好。

答案 2 :(得分:1)

如果您在执行cURL后尝试输出$content变量,您会发现该网站会发出错误的错误消息。

该错误基本上是网站期望您未提供的一些用户代理检查。

如果您在执行curl_exec()之前插入此内容,则会正确获取内容:

curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

话虽如此,您仍然无法获得任何结果,因为您尝试解码JSON而网站没有返回JSON字符串。这需要删除:

$content = json_decode($content, true);

现在一切都应该按照您的意愿运作。