CURL PHP试图获取非对象的属性

时间:2019-03-22 15:43:40

标签: php curl simple-html-dom

我正在尝试使用简单的html dom解析通过CURL获得的html输出,但是出现此错误:

  

试图获取非对象的属性“内文”

这是相关代码:

$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;

输出变量是从CURL获得的文本形式的HTML收集

2 个答案:

答案 0 :(得分:1)

更新后的答案

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

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

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

通过CSS选择器查找元素。如果设置了索引,则返回第N个元素对象,否则返回对象的数组

所以您的代码应该像

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

  

成功返回true,失败返回false。但是,如果设置了CURLOPT_RETURNTRANSFER选项,则成功时返回结果,失败时返回false

答案 1 :(得分:0)

从文档中:

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

通过CSS选择器查找子级。如果返回第N个元素对象   设置了索引,否则返回一个对象数组。

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

1-find调用返回一个数组,所以您必须这样做:

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

2- find调用找不到任何具有 kungtext 类的元素,因此它返回null,并且innertext抛出错误是正常的。

如果find方法仅从dom中返回一个具有 kungtext 类的元素,则您的代码将在onyl上正常工作。