Pregunta

Tengo algún problema sobre el análisis, necesito obtener un enlace de la foto, pero el error está en el código. Se ha encontrado un error PHP Gravedad: AVISO Mensaje: Tratar de obtener propiedad de no objeto Nombre de archivo: vistas / Varle2_view.php Número de línea: 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);
}
?>

Fuente de web

 <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" />

¿Fue útil?

Solución

Obtiene esta advertencia porque su consulta de búsqueda no devuelve ningún objeto de nodo, ya que no hay una etiqueta de intervalo con img como atributo.

Si entiendo bien, está intentando encontrar el contenido de texto de un nodo de intervalo que tiene como un nodo IMG que tiene un atributo 'Data-original'.Por lo tanto, la sintaxis es (ya que IMG es un nodo y no un atributo):

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

Si su objetivo es obtener el enlace de la imagen (que está oculto dentro del atributo no estándar de data-original, debe usar:

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

Otros consejos

Usted está obteniendo una foto $ como una cadena como esta:

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

y luego estás tratando de tratarlo como objeto:

$linkas = $phone->href;

no se puede hacer.No use plaintext si desea un objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top