۴ mohammad dadkhah
گرفتن اطلاعات از چند کلاس در کنار هم 22
جامعه پی اچ پی ایجاد شده در ۱۰ اردیبهشت ۱۴۰۱

سلام

سوال اول چه طور می‌شود متوجه شده که یک کلاس با جاوااسکریپت لود شده است؟

سوال دوم در فیلم‌ها چند کلاس در کنار هم نیست و این که در جواب سوال یکی از دوستان اشاره کرده اید که به این شکل عمل کنید

$elements = $crawler->filter('a[class]')->each(function($node){
    return $node->text();
});
var_dump($elements);

حالا بنده یک کلاس خاص مد نظر ام است یک سری از تگ‌ها اون را دارند و کد بالا را به این شکل تغییر می‌دهم

include "vendor/autoload.php";
use Goutte\\Client;
$client = new Client();
$productPage="https://www.digikala.com/product/dkp-6290729/%D9%84%D9%BE-%D8%AA%D8%A7%D9%BE-14-%D8%A7%DB%8C%D9%86%DA%86%DB%8C-%D8%A7%DB%8C%D8%B3%D9%88%D8%B3-%D9%85%D8%AF%D9%84-vivobook-r465ep-eb219/";
$crawler = $client->request('GET',$productPage );
$elements = $crawler->filter("div.w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG")->each(function($node){
    return $node->text();
});
var_dump($elements);

خروجی نمی‌دهد.

لطفا راهنمایی کنید

فایل zipشده

نمونه کد

<div class="mt-4 grow-1">
<div class="d-flex flex-column flex-row-lg pb-6 py-4-lg PdpSpecification_PdpSpecification__main__QRzvW">
<p class="w-full ml-12-lg text-h5 color-700 shrink-0 mb-3 mb-0-lg PdpSpecification_PdpSpecification__title__9ZpO9">مشخصاتp><div class="w-full w-auto-lg grow-1">
<div class="w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG">
<p class="ml-4 text-body-1 color-500 py-2 py-3-lg p-2-lg shrink-0 PdpSpecification_PdpSpecification__value__l6oUa">وزنp>
<div class="border-b py-2 py-3-lg grow-1"><p class="d-flex ai-center w-full text-body-1 color-900 break-words">۱.۶ کیلوگرمp>div>div><div class="w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG"><p class="ml-4 text-body-1 color-500 py-2 py-3-lg p-2-lg shrink-0 PdpSpecification_PdpSpecification__value__l6oUa">ابعادp><div class="border-b py-2 py-3-lg grow-1"><p class="d-flex ai-center w-full text-body-1 color-900 break-words">۳۲۵x۲۱۶x۱۹.۹ p>div>div><div class="w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG"><p class="ml-4 text-body-1 color-500 py-2 py-3-lg p-2-lg shrink-0 PdpSpecification_PdpSpecification__value__l6oUa">سازنده پردازندهp><div class="border-b py-2 py-3-lg grow-1"><p class="d-flex ai-center w-full text-body-1 color-900 break-words">Intel p>div>div><div class="w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG"><p class="ml-4 text-body-1 color-500 py-2 py-3-lg p-2-lg shrink-0 PdpSpecification_PdpSpecification__value__l6oUa">سری پردازندهp><div class="border-b py-2 py-3-lg grow-1"><p class="d-flex ai-center w-full text-body-1 color-900 break-words">Core i۵ p>div>div><div class="w-full d-flex last PdpSpecification_PdpSpecification__valuesBox__smZXG"><p class="ml-4 text-body-1 color-500 py-2 py-3-lg p-2-lg shrink-0 PdpSpecification_PdpSpecification__value__l6oUa">مدل پردازندهp><div class="border-b py-2 py-3-lg grow-1"><p class="d-flex ai-center w-full text-body-1 color-900 break-words">۱۱۳۵G۷ p>div>div>div>div>div>
mohammad dadkhah ۱۰ اردیبهشت ۱۴۰۱، ۱۰:۳۷

سلام دوست عزیز وقت بخیر

کد شما رو من بررسی کردم و داخل اون قسمت که فیلتر میکنید کدهای css رو اشتباه نوشته بودید و اصلاح کردم اما باز تست کردم ولی خروجی نداد و رو چندین صفحه از دیجی کالا هم تست کردم باز اجرا نشد و احتمال داره یک مشکل از سمت دیجی کالا باشه که باز من بررسی میکنم و به نتیجه رسیدم بهتون اطلاع میدم اما در کل کدهاتون رو برای دریافت اطلاعات از سایت سون لرن تست کردم مشکلی نداشت و اجرا شد و اطلاعات رو هم دریافت کرد و کد رو هم قرار میدم که بررسی بفرمایید.

موفق باشید.



include "vendor/autoload.php";
use Goutte\\Client;
$client = new Client();
$productPage='https://7learn.com/course/php-expert';
$crawler = $client->request('GET', $productPage );
$crawler->filter('ul.timeline li')->each( function($node){
print $node->text() . "
"
; });
کیان سلگی ۱۱ اردیبهشت ۱۴۰۱، ۰۸:۵۹

سلام

ممنوننم که وقت می‌زارید

سوال دیگه ای که دارم این است که خب مثل سایت 7learn تگ ای وجود دارد که یک کلاسی باشد در سایت‌های دیگه هم که بررسی کردم هم همین طور بود اما در سایت دیجی کالا تمام تگ‌های اش چند کلاسی بوده

میشه لطفا سلکتور ای که برای تگ‌ها چند کلاس ای استفاده می‌شود سینتکس اش را بگید

mohammad dadkhah ۱۱ اردیبهشت ۱۴۰۱، ۱۱:۱۹

سلامت باشید

منظورتون این هست که چطور یک تگ که چند کلاس رو داره چطور انتخاب کنیم؟

اگر منظور شما این هست میتونید طبق نمونه دستور زیر عمل کنید :

div.redcolor.btnclose{
margin : 20 px;
}

در دستور بالا تگ div که هم کلاس redcolor و هم کلاس btnclose رو داره انتخاب میشه و همین طور اگر خواستید میتونید با همین سینتکس کلاس‌های دیگه رو هم اضافه کنید.

برای مشاهده نمونه بیشتر سلکتورها هم میتونید سرچ کنید و از لینک زیر هم میتونید استفاده کنید.

https://developer.mozilla.org/en-US/docs/Web/CSS/Class_selectors

موفق باشید.

کیان سلگی ۱۱ اردیبهشت ۱۴۰۱، ۱۱:۵۸