@Inter_GLADOS

Как понять смысл php скрипта парсинга данных и восстановить его работоспособность?

Добрый день уважаемые участники ресурса.

Как понять смысл 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/
Вероятно могу этими действиями нарушать законодательство прося создать нечто подобное для себя, поэтому закрасил домен символами ** Кто может просто понять разобраться или помочь. Отблагодарю по мере включения этого проекта в стадию работоспособности.
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alekssamos
Программист любитель
Но после вывода этого массива через 180 сек возникает завершение работы скрипта

Используйте не серверный PHP, а консольный.
Или, как вариант, перезапускать ваш скрипт, сделать вызов самого себя с параметрами.
Примерно так, не проверял:
<?php

$x = empty($_GET["x"])?1:$_GET["x"];
file_put_contents("mylog.txt", $x."\n", FILE_APPEND);
if($x>5) exit();
$x+=1;
$ch = curl_init("http://mserver.example.com/script.php?x=".$x);
curl_exec($ch);
curl_close($ch);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы