我想从网站上获取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代码,我回声并获取完整的HTML代码。
我在做什么错?
谢谢
您正在遇到此错误,因为$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 constand,则它将返回 false
(而不是对象)。我相信可能是这种情况。
说实话,除了像Simple-Html-dom这样的流行库还具有更全面的API文档。