PHP输出一直说'DOMDocument :: loadHTML():在''作为输入提供空字符串'

时间:2013-07-21 15:36:15

标签: php arrays dom curl xpath

我有这段代码可以检索$curl_scrapped_page中的每个链接:

require_once ('simple_html_dom.php');
$des_array = array();
$url = 'http://citeseerx.ist.psu.edu/search?q=mean&t=doc&sort=rlv';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
$html = new simple_html_dom();
$html->load($curl_scraped_page);

然后我想为每个链接(在该链接的页面上)获取abstract我报废了。 (我还得到其他内容,例如titledescription等等,但问题只在于abstract}:

foreach ($html->find('div.result h3 a') as $des) {
    $des2 = 'http://citeseerx.ist.psu.edu' . $des->href;
    $ch = curl_init($des2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curl_scraped_page2 = curl_exec($ch);
    libxml_use_internal_errors(true);
    $dom = new DomDocument();
    $dom->loadHtml($curl_scraped_page2);//line 72
    libxml_use_internal_errors(false);
    $xpath2 = new DomXPath($dom);    
    $thing = $xpath2->query('//p[preceding::h3[preceding::div]]')->item(1)->textContent; //line 75   
    array_push($des_array, $thing);
}
curl_close ($ch);

这是显示代码:

for ($i = 0; $i < 10; $i++) {
    echo $des_array[$i];
}

当我在浏览器上查看它时,它给了我这个,三次:

Warning: DOMDocument::loadHTML(): Empty string supplied as input in    C:\xampp\htdocs\MSP\Citeseerx.php on line 72

Notice: Trying to get property of non-object in C:\xampp\htdocs\MSP\Citeseerx.php on line 75

我意识到我将空字符串推送到$des_array。所以我尝试了这个:

if (empty($thing)){
    array_push($des_array,'');
}
else{
    array_push($des_array, $thing);
}

而且:if ($thing!=''){..}

它仍然给了我这个错误。 我该怎么办? 感谢..

2 个答案:

答案 0 :(得分:0)

curl_exec()可能会返回false。在那种情况下检查curl_error()是什么错误。例如,如果href属性不以/开头,则会将无效的网址传递给curl_init函数。您也可以使用curl_info()获取有关服务器响应的更多信息

答案 1 :(得分:0)

实际上,$ curl_scraped_pa​​ge应该是一个打开文件而不是变量的句柄,因为你将传输作为一个返回。二进制文件应该被读取到文件,你不能传递给varible,因为它不是一个字符串