Попытка получить свойство не-объекта (разбор)

У меня проблема с парсингом, мне нужно получить ссылку на фото, но ошибка в коде. Произошла ошибка PHP Серьезность: уведомление: попытка получить свойство не-объекта Имя файла: views/varle2_view.php Номер строки: 25

 <h2>Telefonai Varle</h2>
</br>
<?php
include_once('simple_html_dom.php');
 $url = "https://www.varle.lt/mobilieji-telefonai/";

 // Start from the main page
 $nextLink = $url;

 // Loop on each next Link as long as it exsists
while ($nextLink) {
echo "<hr>nextLink: $nextLink<br>";
//Create a DOM object
$html = new simple_html_dom();
// Load HTML from a url
$html->load_file($nextLink);

/////////////////////////////////////////////////////////////
/// Get phone blocks and extract info (also insert to db) ///
/////////////////////////////////////////////////////////////
$phones = $html->find('a[data-id]');

foreach($phones as $phone) {

   $photo=$phone->find('span[img=data-original]',0)->plaintext;
    // Get the link
    $linkas = $phone->href;

    // Get the name
    $pavadinimas = $phone->find('span[class=inner]', 0)->plaintext;
    $pavadinimas = str_replace("Išmanusis telefonas"," ",$pavadinimas);

    // Get the name price and extract the useful part using regex
    $kaina = $phone->find('span[class=price]', 0)->plaintext;
    // This captures the integer part of decimal numbers: In "123,45" will capture "123"... Use @([\d,]+),?@ to capture the decimal part too
    preg_match('@(\d+),?@', $kaina, $matches);
    $kaina = $matches[1];

    echo $pavadinimas, " #----# ", $kaina, " #----# ", $linkas, "#----#", $photo, "     <br>";

//$query = "insert into telefonai (pavadinimas,kaina,parduotuve,linkas) VALUES (?,?,?,?)";
 //     $this->db->query($query, array($pavadinimas,$kaina,"Varle.lt", $linkas));
}
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////

// Extract the next link, if not found return NULL
  $nextLink = ( ($temp = $html->find('div.pagination a[class="next"]', 0)) ?    "https://www.varle.lt".$temp->href : NULL );

// Clear DOM object
$html->clear();
unset($html);
}
?>

источник сети

 <a href="https://www.varle.lt/mobilieji-telefonai/htc-desire-500-dual-sim-glossy-juodas-506e.html" class="grid-item product  " data-id="606846"
    title=" HTC DESIRE 500 Dual SIM GLOSSY JUODAS 506e - Mobilieji telefonai">



<span class="left-border"></span>
<span class="left-border-hover"></span>
<span class="right-border-hover"></span>
<span class="top-border-hover"></span>
<span class="bottom-border-hover"></span>


    <span class="wishlist_button_cont">
        <span class="add_to_wishlist witem606846" data-id="606846">
            <span class="icon insert"></span>
        </span>
    </span>


<span class="img-container" style="position: relative;">


        <img src="/static/app/img/white_space.png?lazyyy" class="lazy" data-original="/static/uploads/products/235x195/2/htc/htc-desire-500-dual-sim-glossy-black-506e_3.jpg"
            alt=" HTC DESIRE 500 Dual SIM GLOSSY JUODAS 506e - Mobilieji telefonai" />

person Nekasas    schedule 13.04.2014    source источник


Ответы (2)


Вы получаете это предупреждение, потому что ваш поисковый запрос не возвращает никакого объекта узла, так как нет тега span с img в качестве атрибута.

Если я правильно понимаю, вы пытаетесь найти текстовое содержимое узла span, который имеет дочерний узел img с атрибутом «исходные данные». Итак, синтаксис (поскольку img — это узел, а не атрибут):

$photo=$phone->find('span img[data-original]',0)->plaintext;

Если ваша цель — получить ссылку на изображение (которая скрыта внутри нестандартного атрибута data-original, вы должны использовать:

$photo=$phone->find('span img[data-original]',0)->attr['data-original'];
person Casimir et Hippolyte    schedule 13.04.2014
comment
Спасибо, И еще один маленький вопрос о вставке в БД. Теперь у меня есть /static/uploads/products/235x195/26/sam/samsung-galaxy-s4.png, но я хочу, чтобы это было в моей таблице https://varle. lt/static/uploads/products/235x195/26/sam/samsung-galaxy-s4.png. Это сложно? - person Nekasas; 13.04.2014
comment
@Mangirdas: О, да, это очень сложно, вы должны объединить две строки символов, что является очень сложной задачей в PHP :) - person Casimir et Hippolyte; 13.04.2014
comment
глупый вопрос, согласен, просто смотреть на это слишком сложно - person Nekasas; 13.04.2014

Вы получаете $photo в виде такой строки:

$photo=$phone->find('span[img=data-original]',0)->plaintext;

И тогда вы пытаетесь обращаться с ним как с объектом:

$linkas = $phone->href;

Это невозможно сделать. Не используйте plaintext, если вам нужен объект.

person Rafał Walczak    schedule 13.04.2014
comment
спасибо, Может знаете как правильно разобрать ссылку на фото? - person Nekasas; 13.04.2014
comment
Что если просто удалить ->plaintext часть? - person Rafał Walczak; 13.04.2014
comment
если удалить - ошибки нет, но потом печатаю просто пусто где должна быть ссылка на фото - person Nekasas; 13.04.2014