Call to a member function first_child() on a non-object

你的特仑苏 发布于 2014/06/13 17:00
阅读 196
收藏 0
PHP
<?php 
header("Content-Type: text/html; charset=utf-8");
require_once "simple_html_dom.php";
$value="小苹果";
$result=find($value);
function find($value)
{
	$qurl='http://music.baidu.com/search?key='.$value;//搜索链接
	$html1=file_get_html($qurl);
	$div=$html1->find('span[class=song-title]');
    $link1=$div->first_child ()->href;
	$link2='http://music.baidu.com/'.$link1.'/download';//在后面加上/download
	$html2=file_get_html($link2);//解析这个页面,也就是下载的那个页面
	$download=$html2->getElementById('128');
	$url=$download->href;//获得想要的链接
	$title=$html2->find('span[class=fwb]',0)->plaintext;//获得歌名
	$author=$html2->find('span[class=author_list]',0)->plaintext;//获得歌手	
	return array('title'=>$title,'author'=>$author,'url'=>substr($url,22));
}
//echo $link1."<br/>";
//echo substr($url,22);
echo $result['title']."<br/>";
echo $result['author']."<br/>";
echo $result['url'];

?>

一直显示错误: Debug Error: D:\Program Files\Zend\Apache2\htdocs\gb\Baidu_API.php line 11 - Call to a member function first_child() on a non-object 求解答,谢谢



加载中
0
樂天
樂天

那就是这句:

$div=$html1->find('span[class=song-title]');

出问题了,可能是没有class为song-title的span吧

或者要:

$div=$html1->find('span.song-title');

你的特仑苏
你的特仑苏
都试过了,网页中确实有span[class=song-title] 这个,我换成其他的试过也不行 $div=$html1->find('span.song-title'); 这样的写法也试过,可一样还是出错
0
樂天
樂天

引用来自“樂天”的评论

那就是这句:

$div=$html1->find('span[class=song-title]');

出问题了,可能是没有class为song-title的span吧

或者要:

$div=$html1->find('span.song-title');

有一种可能情况是,php并没有获取到网页的内容。而你检查网页是否有内容可能是通过浏览器。file_get_html($qurl)获取网页的方式可能被百度屏蔽了。

可以先测试下面这个:

$html1 = str_get_html('<html><span class=\"song-title\">Hello!</span></html>');
$div=$html1->find('span[class=song-title]');



你的特仑苏
你的特仑苏
还是不知道哪出错了,你能帮我调试一下看看吗?我自己弄了好几天了但是一直出问题,拜托了
0
工程师爸爸
工程师爸爸

调试:

var_dump($html1, $div); 
var_dump( method_exists($div, 'first_child') );



0
樂天
樂天
我先index.php:
<?php

require_once "simple_html_dom.php";
$qurl='http://music.baidu.com/search?key=小苹果';
$html1=file_get_html($qurl);

$div=$html1->find('span.song-title');
print_r($div);



用浏览器查看,直接电脑就卡了。不得已,使用命令行:
php index.php



陷入了死循环。

然后,重写index.php:
<?php

require_once "simple_html_dom.php";
$qurl='http://music.baidu.com/search?key=小苹果';
$html1=file_get_html($qurl);

$div=$html1->find('span.song-title');
//print_r($div);

$link1=$div->first_child ()->href;
print_r($link1);



出现了和你一样的错误。额,这个可能是simple_html_dom.php的bug。。。要不换个库吧

0
你的特仑苏
你的特仑苏

引用来自“樂天”的评论

我先index.php:
<?php

require_once "simple_html_dom.php";
$qurl='http://music.baidu.com/search?key=小苹果';
$html1=file_get_html($qurl);

$div=$html1->find('span.song-title');
print_r($div);



用浏览器查看,直接电脑就卡了。不得已,使用命令行:
php index.php



陷入了死循环。

然后,重写index.php:
<?php

require_once "simple_html_dom.php";
$qurl='http://music.baidu.com/search?key=小苹果';
$html1=file_get_html($qurl);

$div=$html1->find('span.song-title');
//print_r($div);

$link1=$div->first_child ()->href;
print_r($link1);



出现了和你一样的错误。额,这个可能是simple_html_dom.php的bug。。。要不换个库吧

好的吧,没事的。还是很感谢你 以后还望多多指教
0
你的特仑苏
你的特仑苏

引用来自“D哥”的评论

调试:

var_dump($html1, $div); 
var_dump( method_exists($div, 'first_child') );



照您说的写了,但还是没有找到错误原因。刚开始接触PHP,很多东西还是搞不太懂。您有时间吗?有时间的话能麻烦您帮我看一下代码吗?实在找不到什么好的解决办法,而且还要急着要代码,拜托了
返回顶部
顶部