Nochmals zu phpQuery

Grüße an alle. Kürzlich habe ich eine Bestellung aufgegeben, bei der es notwendig war, Daten automatisch auf die Site zu ziehen (mit anderen Worten, schreiben Sie einen Parser).

Der Inhalt des Artikels:



Vorwort


Da ich in PHP arbeite, fiel mein Blick auf die PHPQuery- Bibliothek. Natürlich stimme ich zu, dass es viele andere Bibliotheken gibt, einschließlich der standardmäßig in PHP integrierten , aber für einen normalen Programmierer, der über das Wochenende freiberuflich arbeitet, braucht man eine Art Wunder. Zum Glück treibt uns Faulheit alle an. Eine tschechische Faulheit führte zur Schaffung von phpQuery.

Ich habe keine Dokumentation in russischer Sprache für diese Bibliothek gefunden (vielleicht habe ich schlecht ausgesehen?). Als ich eine Reihe von Fragen von Neulingen in den Foren fand und die Dokumentation nicht auf Englisch lesen konnte, dachte ich darüber nach, diesen Artikel zu schreiben. Bitte beachten Sie, dass der Artikel hauptsächlich für Anfänger geschrieben wurde .

Fangen wir an


PhpQuery ist nicht die schnellste Bibliothek, sondern eine von. Mit neueren PHP-Versionen ist es fast unsichtbar. Die Hauptlast liegt nach wie vor beim Laden der Seite.
Es hat viele Funktionen, die in vielen russischsprachigen Handbüchern nicht erwähnt werden.
Einige Programmierer, ohne phpQuery verstanden zu haben, führen ihre eigenen Bibliotheken aus (genau wie unsere Kollegen aus der js-Welt). Ja, diese Bibliothek hat einen großen Nachteil: Der Code ist veraltet, funktioniert aber für sich.

Starten Sie Arbeit


Für Anfänger ist es ziemlich schwierig, sofort zu verstehen, wie phpQuery funktioniert. Aber ich werde versuchen, alle schwierigen Momente so weit wie möglich zu „kauen“.

Viele Methoden dieser Bibliothek zielen darauf ab, mit Dom zu arbeiten, als ob wir an jQuery arbeiten würden. Und die Namen dieser Bibliotheken sind so ähnlich wie möglich.

Und so. Zuerst müssen wir uns für die Site entscheiden, von der wir den HTML-Code abholen. Dies muss übrigens keine Site sein. Wenn wir bereits HTML (XML) in der Datei (Variable) haben, können wir es von dort laden.

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

Als nächstes müssen wir den resultierenden Code an den phpQuery-Handler übergeben

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

Die Methode "newDocument ()" gibt ein dom-Objekt zurück, mit dem wir arbeiten können.

Jetzt können wir etwas in diesem dom-Objekt finden. Stellen wir uns vor, wir rufen eine Seite einer Site auf, auf der sich ein solcher Block befindet:

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

In diesem Beispiel gibt es eine Zeile mit einem Link zu Marke, Markenname, Produktname, Beschreibung, ID und Preis.

Praktisch Teil von


Versuchen wir, alle oben genannten Daten abzurufen.

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

Am Ausgang erhalten wir dieses Array:

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

Fazit


PhpQuery ist eine sehr praktische Bibliothek, aber leider zu schwer. Nach dem Durchlaufen der Elemente wird empfohlen, das Dokument zu entladen:

 phpQuery::unloadDocuments(); 

Trotz der Bequemlichkeit der Bibliothek rate ich Ihnen, sich nicht daran zu gewöhnen. Es ist wahrscheinlich am besten geeignet, um kleine Probleme zu lösen. Aber das ist immer noch eine etwas veraltete Bibliothek.

Diese Bibliothek bietet die Möglichkeit, Elemente im laufenden Betrieb hinzuzufügen. Wir werden dieses Thema jedoch im nächsten Artikel ansprechen.

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


All Articles