curl php试图获取非对象的属性



我正在尝试使用简单的HTML DOM通过卷曲来解析HTML输出,但是我得到了此错误:

试图获得非对象的属性'innertext'

这是相关代码:

$output = curl_exec($ch);
if($output === FALSE) {
    echo "cURL Error: " . curl_error($ch);
}
curl_close($ch);
$html = str_get_html($output);
$kungtext_class = $html->find('div[class=kungtext]');
$kungtext = $kungtext_class->innertext;
echo $kungtext;

输出变量是我从卷曲中获得的文本形式收集的HTML。

更新答案

$kungtext_class为您提供了array,您无法访问该属性,因为您获得了一堆元素,而不仅仅是一个元素。

请参阅文档http://simplehtmldom.sourceforge.net/manual_api.htm

mixed find ( string $selector [, int $index] )

通过CSS选择器找到元素。如果设置了索引,则返回nth元素对象,否则返回对象的 array

,您的代码应该像

foreach ($html->find('div[class=kungtext]') as $kungtext_class) {
    echo $kungtext_class->innertext;
}

或访问索引0(第一个元素):

$kungtext_class = $html->find('div[class=kungtext]', 0);
$kungtext = $kungtext_class->innertext;

旧答案

curl_exec()默认情况下返回 boolean

您需要在Curlopts中设置CURLOPT_RETURNTRANSFER,然后返回预期字符串(成功)。

// Before the curl_exec():
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

http://php.net/manual/en/function.curl-exec.php

在成功或失败时返回truefalse。但是,如果设置了CURLOPT_RETURNTRANSFER选项,它将返回成功的结果, false失败。

来自文档:

mixed find ( string $selector [, int $index] )

找到CSS选择器的孩子。如果返回nth元素对象 设置索引,否则,返回对象的数组。

因此,在您的情况下,返回的值保存在$ kungtext_class中,您在这里遇到的错误可能是:

1-查找呼叫返回数组,因此您必须这样做:

foreach($kungtext_class as $element){
     echo $element->innertext;
}

2-查找呼叫找不到任何具有类功夫的元素,因此它返回null,并且innertext投掷错误是正常的。

如果查找方法仅返回具有类 kungtext

,您的代码将正确工作。

最新更新