InvalidArgumentException - Текущий список узла пуст.
Я использую Goutte Sracper для очистки данных, я получаю ошибку, как InvalidArgumentException - The current node list is empty.
Ниже приведен код, который я использую
$string = $crawler->filter('div#links.results')->html();
if ( empty( $string ) )
return false;
$dom = new \DOMDocument;
$state = libxml_use_internal_errors(true);
$dom->loadHTML($string);
libxml_use_internal_errors($state);
$xp = new \DOMXPath($dom);
$divNodeList = $xp->query('//div[contains(@class, "results_links_deep")]
[contains(@class, "web-result")]
/div[contains(@class, "links_main")]
[contains(@class, "links_deep")]
[contains(@class, "result__body")]');
$results = [];
if(count($divNodeList) > 0){
foreach ($divNodeList as $divNode) {
$results[] = [
trim($xp->evaluate('string(./h2/a[@class="result__a"])', $divNode)),
trim($xp->evaluate('string(.//a[@class="result__snippet"])', $divNode)),
trim($xp->evaluate('string(.//a[@class="result__url"])', $divNode))
];
}
}
Я попытался использовать решение, как показано ниже
if ($crawler->filter('div#links.results')->count() > 0 ) {
$string = $crawler->filter('div#links.results')->html()
}
Затем он начал давать еще одну ошибку, как DOMDocument::loadHTML(): Empty string supplied as input
Любые предложения, пожалуйста?
1 ответ
Ваш filter
не дал никаких результатов. Вот почему он разбился. Вот как я решил эту проблему, добавив try catch.
try {
$string = $crawler->filter('div#links.results')->html()
} catch (\InvalidArgumentException $e) {
// Handle the current node list is empty..
}