Lagi tentang phpQuery

Salam untuk semuanya. Baru-baru ini, saya mengambil pesanan di mana diperlukan untuk secara otomatis menarik data ke situs (dengan kata lain, menulis parser).

Isi artikel:



Kata Pengantar


Karena saya bekerja di php, mata saya tertuju pada perpustakaan phpQuery . Tentu saja, saya setuju bahwa ada banyak perpustakaan lain, termasuk yang dibangun ke dalam php secara default , tetapi untuk programmer biasa yang bekerja freelance selama akhir pekan, Anda perlu semacam keajaiban. Untungnya, kemalasan membuat kita semua. Satu kemalasan Ceko menyebabkan penciptaan phpQuery.

Saya tidak menemukan dokumentasi dalam bahasa Rusia untuk perpustakaan ini (mungkin saya terlihat buruk?). Menemukan banyak pertanyaan dari pendatang baru ke forum, dan tidak dapat membaca dokumentasi dalam bahasa Inggris, saya berpikir untuk menulis artikel ini. Harap dicatat bahwa artikel ini ditulis terutama untuk pemula .

Mari kita mulai


PhpQuery bukan perpustakaan tercepat, tetapi salah satunya. Dengan versi php yang lebih baru hampir tidak terlihat. Beban utama, seperti sebelumnya, terletak pada pemuatan halaman.
Ini memiliki banyak fitur yang tidak disebutkan dalam banyak manual berbahasa Rusia.
Beberapa programmer, karena tidak mengerti phpQuery, menjalankan untuk membuat perpustakaan mereka sendiri (seperti rekan-rekan kami dari dunia js). Ya, perpustakaan ini memiliki kelemahan utama - kode ini sudah usang, tetapi berfungsi dengan sendirinya.

Mulai bekerja


Cukup sulit bagi pemula untuk segera memahami cara kerja phpQuery. Tetapi saya akan mencoba "mengunyah" semua momen sulit sebanyak mungkin.

Banyak metode perpustakaan ini bertujuan untuk bekerja dengan Dom, seolah-olah kami sedang mengerjakan jQuery. Dan nama-nama perpustakaan ini semirip mungkin.

Dan begitulah. Pertama, kita perlu memutuskan situs tempat kita akan mengambil kode HTML. Omong-omong, ini tidak harus menjadi situs. Jika kita sudah memiliki html (xml) dalam file (variabel), maka kita dapat memuatnya dari sana.

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

Selanjutnya, kita perlu meneruskan kode yang dihasilkan ke penangan phpQuery

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

Metode "newDocument ()" akan mengembalikan objek dom yang dengannya kita dapat bekerja.

Sekarang kita dapat menemukan sesuatu di objek dom ini. Mari kita bayangkan bahwa kita membuka halaman situs di mana ada blok seperti itu:

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

Dalam contoh ini, ada garis dengan tautan ke merek, nama merek, nama produk, deskripsi, ID, dan harga.

Praktis bagian dari


Mari kita coba untuk mendapatkan semua data di atas.

 //   $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(); } 

Pada output, kita mendapatkan array ini:

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

Kesimpulan


PhpQuery adalah perpustakaan yang sangat berguna, tetapi sayangnya terlalu berat. Jadi, setelah melalui elemen-elemen, disarankan untuk membongkar dokumen:

 phpQuery::unloadDocuments(); 

Terlepas dari kenyamanan perpustakaan, saya menyarankan Anda untuk tidak membiasakan diri dengannya. Ini mungkin paling cocok untuk memecahkan masalah kecil. Tapi perpustakaan ini masih agak ketinggalan jaman.

Perpustakaan ini memiliki kemampuan untuk menambahkan item dengan cepat. Tapi kita akan menyentuh topik ini di artikel selanjutnya.

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


All Articles