مرة أخرى حول phpQuery

تحية للجميع. في الآونة الأخيرة ، تلقيت طلبًا حيث كان من الضروري سحب البيانات تلقائيًا إلى الموقع (بمعنى آخر ، كتابة محلل).

محتوى المقال:



مقدمة


منذ أن عملت في php ، سقطت عيني على مكتبة phpQuery . بالطبع ، أوافق على أن هناك العديد من المكتبات الأخرى ، بما في ذلك المكتبة المدمجة في php افتراضيًا ، لكن بالنسبة للمبرمج العادي الذي يعمل بشكل مستقل خلال عطلة نهاية الأسبوع ، فأنت بحاجة إلى نوع من المعجزة. لحسن الحظ ، الكسل يدفعنا جميعًا. أدى أحد الكسل التشيكي إلى إنشاء phpQuery.

لم أجد أي وثائق باللغة الروسية لهذه المكتبة (ربما كنت أبحث بشكل سيء؟). عند العثور على مجموعة من الأسئلة من القادمين الجدد إلى المنتديات وعدم القدرة على قراءة الوثائق باللغة الإنجليزية ، فكرت في كتابة هذا المقال. يرجى ملاحظة أن المقال كتب بشكل أساسي للمبتدئين .

لنبدأ


PhpQuery ليست أسرع مكتبة ، ولكن واحدة من. مع إصدارات php الأحدث ، تكون غير مرئية تقريبًا. الحمل الرئيسي ، كما كان من قبل ، يقع على عاتق تحميل الصفحة.
لديها العديد من الميزات التي لم يتم ذكرها في العديد من كتيبات اللغة الروسية.
يعمل بعض المبرمجين ، الذين لم يفهموا phpQuery ، على إنشاء مكتبات خاصة بهم (تمامًا مثل زملائنا من عالم js). نعم ، تحتوي هذه المكتبة على عيب كبير - الرمز قديم ، لكنه يعمل بنفسه.

بداية عمل


من الصعب جدًا بالنسبة للمبتدئين فهم كيفية عمل phpQuery على الفور. لكنني سأحاول "مضغ" كل اللحظات الصعبة قدر الإمكان.

تهدف العديد من أساليب هذه المكتبة إلى العمل مع Dom ، كما لو كنا نعمل على jQuery. وأسماء هذه المكتبات متشابهة قدر الإمكان.

و كذلك. أولاً ، نحتاج إلى اتخاذ قرار بشأن الموقع الذي سنلتقط منه رمز HTML. بالمناسبة ، هذا لا يجب أن يكون موقعًا. إذا كان لدينا بالفعل html (xml) في الملف (متغير) ، فيمكننا تحميله من هناك.

/**  : $siteName = "site.com/";  : $siteName = "index.html"; */ $html = file_get_contents("$siteName"); 

بعد ذلك ، نحتاج إلى تمرير الكود الناتج إلى معالج phpQuery

 $dom = phpQuery::newDocument($html); 

الأسلوب "newDocument ()" سيعيد كائن dom الذي يمكننا العمل به.

الآن يمكننا أن نجد شيئا في هذا الكائن دوم. دعنا نتخيل أننا نقوم بسحب صفحة من الموقع بها مثل هذه الكتلة:

 <div class="product-essential"> <a class="brand-link" href="https://-_.com/-_" title="- "> <span class="brand-name">- </span> </a> <div class="product-name"> <h1>Jeans Denim</h1> </div> <div class="price-info"> <div class="price-box"> <span class="regular-price" id="product-price-424337"> <span class="price">€ 200</span> </span> </div> </div> <div class="description"> <span class="product-description"> </span> <div class="sku"> <span> ID :</span> <span>830214303</span> </div> </div> </div> 

في هذا المثال ، يوجد خط به رابط للعلامة التجارية واسم العلامة التجارية واسم المنتج ووصفه ومعرفه وسعره.

عملي جزء من


دعونا نحاول الحصول على جميع البيانات المذكورة أعلاه.

 //   $html = file_get_contents("https://-_.com/"); //   dom $dom = phpQuery::newDocument($html); //    dom    .product-essential,    find().        . foreach($dom->find(".product-essential") as $key => $value){ //  dom    phpQuery.       pq();    ($)  jQuery. $pq = pq($value); //        .brand-link     "href"    attr(); $productHref[$key]["brand-href"] = $pq->find(".brand-link")->attr("href"); //   .     <span class="brand-name">- </span>. //    ,   <span>       text(); $productHref[$key]["brand-name"] = $pq->find(".brand-name")->text(); //      . //    ,      . //         <h1>,     <div class="brand-name"> $productHref[$key]["product-name"] = $pq->find(".product-name h1")->text(); // PhpQuery    ,    , . //      ! //     . $productHref[$key]["product-price"] = $pq->find(".price-info .price-box .regular-price .price")->text(); //    $productHref[$key]["product-description"] = $pq->find(".description .product-description")->text(); //       . //      next(); //           . $productHref[$key]["product-id"] = $pq->find(".description .sku span")->next()->text(); } 

في الإخراج ، نحصل على هذه المجموعة:

 Array ( [0] => Array ( [brand-href] => https://-_.com/-_ [brand-name] => -  [product-name] => Jeans Denim [product-price] => € 200 [product-description] =>   [product-id] => 830214303 ) ) 

استنتاج


PhpQuery هي مكتبة مفيدة للغاية ، لكنها للأسف ثقيلة للغاية. لذلك ، بعد استعراض العناصر ، يوصى بإلغاء تحميل المستند:

 phpQuery::unloadDocuments(); 

على الرغم من راحة المكتبة ، فإنني أنصحك بعدم التعود عليها. ربما هو الأنسب لحل المشاكل الصغيرة. ولكن هذا لا يزال مكتبة قديمة.

هذه المكتبة لديها القدرة على إضافة عناصر على الطاير. لكننا سنتطرق إلى هذا الموضوع في المقال التالي.

Source: https://habr.com/ru/post/ar471644/


All Articles