Выход PHP продолжает говорить "DOMDocument :: loadHTML(): пустая строка, предоставленная в качестве входных данных в '

У меня есть этот код, который будет извлекать каждую ссылку в $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 для каждой ссылки (на странице этой ссылки), которую я сломал. (Я также получаю другие вещи, такие как title, description и т.д., Но проблема только в этом 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 ответа

На самом деле $ curl_scraped_page должен быть дескриптором открытого файла, а не переменной, так как вы возвращаете передачу как a. Двоичный файл должен быть прочитан в файл, который нельзя передать в переменную, поскольку это не строка


curl_exec() может возвращать false. В этом случае проверьте с curl_error(), что такое ошибка. Например, если атрибут href не начинается с / вы передадите неверный url функции curl_init. Также вы можете использовать curl_info() для получения дополнительной информации об ответе сервера

licensed under cc by-sa 3.0 with attribution.