Добрый день уважаемые участники ресурса.
Как понять смысл php скрипта парсинга данных и восстановить его работоспособность?
Или видоизменить его содержимое для достижения результата выполнения.
Суть задачи скрипта примерно следующая необходимо используя 2 инструмента и и сами возможности PHP выкачать некоторые данные из сайта доннора к себе на локальный сайт с базой данных.
В проекте использовал :
simple_html_dom.php , который скачал на просторах интернета как готовую библиотеку ( отдельный файл на 1725 строчек кода).
Пытаюсь получать некоторые обьекты используя 2 стратегии
1) Просто создаю переменные в которые уже присваиваю содержимое обьектов, которые загружает себе из хтмл кода сам инструмент curl в слудеющем коде вывод значений этих переменных работает:
include('simple_html_dom.php');
include('db.php');
function curlGetPage($url, $referer = 'https://google.com')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$response = curl_exec($ch);
return $response;
curl_close($ch);
}
$page = curlGetPage('https://**.**.ua/zaryadni-prystroyi');
$html = str_get_html($page);
$peganavi = $html->find('.pagination',0);
echo $peganavi;
Дальше пытаюсь модифицировать код с пониманием того что пытаюсь уже получать содержимое страницы в массив с обьектами:
include('simple_html_dom.php');
include('db.php');
function curlGetPage($url, $referer = 'https://google.com')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$response = curl_exec($ch);
return $response;
curl_close($ch);
}
$page = curlGetPage('https://**.**.ua/zaryadni-prystroyi');
$html = str_get_html($page);
$posts = [];
foreach ($html->find('.col-6 col-lg-4 col-xl-3 us-item') as $elements) {
$img = $elements->find('.img-fluid oct-lazy',0); //класс фото товара
$link = $elements->find('.us-module-img', 0);// ссылка на пост фид итем товара
$posts[] = [
'img' => $img->src,
'title' =>trim($link->plaintext),
'link' => $link->href,
];
}
//print_r($posts);
foreach ($posts as $post) {
echo "Image: " . $post['img'] . "<br>";
echo "Title: " . $post['title'] . "<br>";
echo "Link: " . $post['link'] . "<br>";
echo "<br>"; // Add some space between each post's information
}
Но после вывода этого массива через 180 сек возникает завершение работы скрипта и если расскоментировать //print_r($posts); и закооментировать второй цикл foreach() тогда php выводит просто "Array()". В интернете видел образец кода, владелец которого сам выложил для пользования и утверждает что его код полностью работает. Так что я не нарушаю авторские права. Помогите разобрать логику скрипта и сделать его работоспособным. Слуюещим этапом я планировал этот код модифицировать и попытаться загружать к себе в базу данных данные товара.
Содержимое того что выложил автор в исходниках не совсем похоже с моим кодом. Но может кому то пригодиться там есть все файлы с библиотекой simple_html_dom.
https://valerykoretsky.com/demo/parser/parser_demo.zip
PS/
Вероятно могу этими действиями нарушать законодательство прося создать нечто подобное для себя, поэтому закрасил домен символами ** Кто может просто понять разобраться или помочь. Отблагодарю по мере включения этого проекта в стадию работоспособности.