Во-первых конечно проверьте какой ответ приходит от запроса к странице Кинопоиска на тех итерациях цикла когда получаете ошибку. Там скорей всего капча появляется.
Во-вторых используйте для подключения страницы не примитивный
file_get_contents
, а полноценные библиотеки. Тот же дефолтный
CURL
например. Передавайте полностью HTTP-заголовки, имитируя обычный пользовательский браузер. Учитывая специфику Кинопоиска и то, что его пытаются парсить все кому не лень, такие банальные блокировки юзера как запросы с пустыми заголовками там стоят 100%.
Ну и уже соответственно если думать дальше и капча все-равно будет появляться, то уже писать скрипт обхода капчи с помощью соответствующих сервисов.
Плюс один дополнительный момент парсинга с помощью библиотеки
Symfony\DomCrawler
на будущее. Подгружайте исходники для парсинга не напрямую через вызов класса
new Crawler()
, а уже после вызова методом
->addHtmlContent()
, чтобы избежать проблем с кодировкой:
$newUrl = new Crawler();
$newUrl->addHtmlContent(file_get_contents('https://www.kinopoisk.ru/film/' . $value['kinopoisk_id']));