سؤال

لدي مشكلة في التحليل، أحتاج إلى الحصول على رابط الصورة، ولكن هناك خطأ في الكود.واجه خطأ 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" />
هل كانت مفيدة؟

المحلول

لقد حصلت على هذا التحذير لأن استعلام البحث الخاص بك لا يُرجع أي كائن عقدة، نظرًا لعدم وجود علامة امتداد معه img كسمة.

إذا فهمت جيدًا، فأنت تحاول العثور على المحتوى النصي للعقدة الممتدة التي تحتوي على عقدة img التي تحتوي على سمة "البيانات الأصلية" كطفل.إذن بناء الجملة هو (نظرًا لأن img عبارة عن عقدة وليست سمة):

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

إذا كان هدفك هو الحصول على رابط الصورة (المخفي داخل ملف data-original سمة غير قياسية، يجب عليك استخدام:

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

نصائح أخرى

أنت تحصل على $photo كسلسلة مثل هذا:

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

ثم تحاول معاملته ككائن:

$linkas = $phone->href;

لا يمكن القيام بذلك.لا تستخدم plaintext إذا كنت تريد كائنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top