В цикле у меня перебираются страницы и загружаются
for($j=0;$j<100;$j++){
$url_main_link=$url_main.'&p='.$j;
$dataLinkPage=$curl->createCurl($url_main_link,$params);
$htmlOneAds = str_get_html($dataLinkPage);
$getLinkads=$htmlOneAds->find('div[class=js-initial]');
}
Но почему-то, через какой-то промежуток циклов, вылетает ошибка. Подскажите, в какой стороне искать причину, т.к непонятно, почему она возникает, при условии, что если брать эту страницу отдельно из цикла, то никакой ошибки нет. Может памяти не хватает или конфиг подправить какой-то ?
Во-первых, у вас бесконечный цикл.
for($j=100;$j<100;$j++){
Сама ошибка означает что вы пытается применить поиск к неправильному объекту.
Подозреваю что раз вы бесконечно перебираете по номеру страницы, то в какой-то момент скрипт уходит за последнюю доступную страницу и CURL возвращает 404 ошибку или редирект или что-то подобное, а парсер такой ответ не может обработать и помещает не объект в $htmlOneAds, что в свою очередь приводит к ошибке.
Я бы рекомендовал в начале парсинга определять максимальное количество страниц и останавливать скрипт на последней странице.
Так же у вас вижу передачу некоторых параметров к url, что может вызывать ошибку.
Попробуйте добавить проверку $htmlOneAds по is_object, и там где true выполнять свой скрипт, а там где false - записывать в лог var_dump. Это поможет в отладке.
Примерно так:
for($j=0;$j<100;$j++){
$url_main_link=$url_main.'&p='.$j;
$dataLinkPage=$curl->createCurl($url_main_link,$params);
$htmlOneAds = str_get_html($dataLinkPage);
if (is_object($htmlOneAds)){
$getLinkads=$htmlOneAds->find('div[class=js-initial]');
} else {
$fp = fopen($url_main_link . '.txt', 'w');
fwrite($fp, serialize($htmlOneAds));
fclose($fp);
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей