Encore une fois à propos de phpQuery

Salutations à tous. Récemment, j'ai pris une commande où il était nécessaire d'extraire automatiquement des données sur le site (en d'autres termes, écrire un analyseur).

Le contenu de l'article:



Préface


Depuis que je travaille en php, mes yeux sont tombés sur la bibliothèque phpQuery . Bien sûr, je conviens qu'il existe de nombreuses autres bibliothèques, y compris celle intégrée à php par défaut , mais pour un programmeur ordinaire qui travaille en freelance le week-end, vous avez besoin d'une sorte de miracle. Heureusement, la paresse nous pousse tous. Une paresse tchèque a conduit à la création de phpQuery.

Je n'ai trouvé aucune documentation en russe pour cette bibliothèque (peut-être que je cherchais mal?). Trouver un tas de questions des nouveaux arrivants sur les forums, et ne pouvant pas lire la documentation en anglais, j'ai pensé à écrire cet article. Veuillez noter que l'article a été écrit principalement pour les débutants .

Commençons


PhpQuery n'est pas la bibliothèque la plus rapide, mais l'une des. Avec les nouvelles versions php, il est presque invisible. La charge principale, comme précédemment, repose sur le chargement des pages.
Il possède de nombreuses fonctionnalités qui ne sont pas mentionnées dans de nombreux manuels en russe.
Certains programmeurs, sans avoir compris phpQuery, courent pour créer leurs propres bibliothèques (tout comme nos collègues du monde js). Oui, cette bibliothèque a un inconvénient majeur - le code est obsolète, mais il fonctionne pour lui-même.

Commencer travailler


Il est assez difficile pour les débutants de comprendre immédiatement comment fonctionne phpQuery. Mais je vais essayer de «mâcher» tous les moments difficiles autant que possible.

De nombreuses méthodes de cette bibliothèque visent à travailler avec Dom, comme si nous travaillions sur jQuery. Et les noms de ces bibliothèques sont aussi similaires que possible.

Et ainsi. Tout d'abord, nous devons décider du site à partir duquel nous allons récupérer le code HTML. Soit dit en passant, cela ne doit pas nécessairement être un site. Si nous avons déjà du html (xml) dans le fichier (variable), alors nous pouvons le charger à partir de là.

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

Ensuite, nous devons passer le code résultant au gestionnaire phpQuery

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

La méthode "newDocument ()" retournera un objet dom avec lequel nous pouvons travailler.

Maintenant, nous pouvons trouver quelque chose dans cet objet dom. Imaginons que nous tirions une page d'un site où il y a un tel bloc:

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

Dans cet exemple, il y a une ligne avec un lien vers la marque, le nom de la marque, le nom du produit, sa description, son ID et son prix.

Pratique partie de


Essayons d'obtenir toutes les données ci-dessus.

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

En sortie, nous obtenons ce tableau:

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

Conclusion


PhpQuery est une bibliothèque très pratique, mais malheureusement trop lourde. Ainsi, après avoir parcouru les éléments, il est recommandé de décharger le document:

 phpQuery::unloadDocuments(); 

Malgré la commodité de la bibliothèque, je vous conseille de ne pas vous y habituer. Il est probablement le mieux adapté pour résoudre de petits problèmes. Mais c'est toujours une bibliothèque un peu dépassée.

Cette bibliothèque a la possibilité d'ajouter des éléments à la volée. Mais nous aborderons ce sujet dans le prochain article.

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


All Articles