我想从网站上获取HTML代码,我正在使用此代码执行此操作,但我收到此错误: 在非对象上调用成员函数find()
这是代码:
include_once('simple_html_dom.php');
$fileEndEnd = mb_convert_encoding("http://www.yjc.ir/fa/news/5192798/%D8%B3%DB%8C%D8%B3%DB%8C-%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1-%D8%AA%D9%88%D9%82%D9%81-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-%D9%87%D9%88%D8%A7%DB%8C%DB%8C-%D8%B9%D8%B1%D8%A8%D8%B3%D8%AA%D8%A7%D9%86-%D8%A8%D9%87-%DB%8C%D9%85%D9%86-%D8%B4%D8%AF", 'HTML-ENTITIES', "UTF-8");
$c=curl_init($fileEndEnd);
curl_setopt( $c, CURLOPT_USERAGENT,'nginx-curl-blahblahblah' );
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
$r=curl_exec( $c );
curl_close( $c );
$html = str_get_html($r);
foreach($html->find('div.body') as $e)
$a= $e->outertext . '<br>';
错误在这一行:
foreach($html->find('div.body') as $e)
我确定$ r变量有html代码,我回显$ r并获得完整的html代码。
我做错了什么?
谢谢
答案 0 :(得分:1)
您收到此错误,因为显然$html
不是object
。
根据simple-html-dom
的API,str_get_html
函数应该返回一个对象。但是,当我过度查看该库的源代码时,我注意到以下代码:
// get html dom from string
function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
if (empty($str) || strlen($str) > MAX_FILE_SIZE)
{
$dom->clear();
return false;
}
$dom->load($str, $lowercase, $stripRN);
return $dom;
}
因此,如果$str
参数为空,或者如果该字符串的长度大于MAX_FILE_SIZE常量,则返回false
(而不是对象)。我相信情况可能就是这样。
老实说,除了像simple-html-dom这样的流行图书馆之外,还有更全面的api文档。