Здравствуйте, столкнулся с такой задачей: в Базе данных в таблице "Monitoring" есть поле "one_url" в котором хранятся ссылки, надо получить массив этих ссылок, обойти каждую ссылку (из таблицы one_url) и сохранить значение в поле "one_price". База данных: https://prnt.sc/hykh7m
Пытаюсь обойти с помощью Simple HTML DOM Parser массив ссылок чтобы получить значение.
Работаю с Yii2, вот пример моего кода:
class CurlController extends Controller
{
public function actionIndex(){
$base = new Monitoring(); //Обьявляем подключение к базе
$base2 = Monitoring::find()->all(); //Получаем значения из базы данных
//Делаем перебор массива ссылок
foreach ($base2 as $one_url){
echo "<pre>";
print $one_url->url_test;
}
$url = $one_url->url_test; //Передаем значение ссылок в переменную
/**
* GetMultiContent->init($url) инициализирует парсер, принимает два параметра:
* $url type string - ссылки парсируемых сайтов, если передать массив отработает мультизагрузчик
* если строку отработает обычный загрузчик
* $no_parser type boolean - true, не создавать объект Simple_html_dom контент для обработки контента
* и вернет строку, false, создасть объект автоматически (по умолчанию false)
*/
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $url)
echo $element->plaintext . "\n";
}
}
Делаю все на Yii2, не могу передать в поле $url = $one_url->url_test; - ссылку, подскажите как это сделать пожалуйста, всю голову уже сломал гуглить и как потом каждое значение сохранить в таблицу?
У вас строка $url = $one_url->url_test; //Передаем значение ссылок в переменную находится вне цикла foreach, $one_url->url_test существует только внутри цикла. Кроме того у Вас есть еще ошибки. Во-первых,
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $url)
echo $element->plaintext . "\n";
тоже находится вне цикла. Во-вторых, если перенести этот код в первый цикл foreach, то будет ошибка 2ого цикла из-за того, что вы используете as $url хотя $url уже выполняет другую роль, в-третьих вы вызываете $element->plaintext - хотя такого объекта не существует.
Для того, чтобы потом занести значение в таблицу, вам нужно вызвать соответствующую сущность, передать ей нужные значение и использовать метод save()
Переделанный примерный код выглядет примерно так:
class CurlController extends Controller
{
public function actionIndex(){
$base = new Monitoring(); //Обьявляем подключение к базе
$base2 = Monitoring::find()->all(); //Получаем значения из базы данных
$model = new Model(); // та сущность, куда будет вносить данные (это отдельный класс, который расширяет ActiveRecord)
//Делаем перебор массива ссылок
foreach ($base2 as $one_url){
echo "<pre>";
print $one_url->url_test;
$url = $one_url->url_test; //Передаем значение ссылок в переменную
/**
* GetMultiContent->init($url) инициализирует парсер, принимает два параметра:
* $url type string - ссылки парсируемых сайтов, если передать массив отработает мультизагрузчик
* если строку отработает обычный загрузчик
* $no_parser type boolean - true, не создавать объект Simple_html_dom контент для обработки контента
* и вернет строку, false, создасть объект автоматически (по умолчанию false)
*/
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $element) {
echo $element->plaintext . "\n";
$model->text = $element->plaintext;
$model->save();
}
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости