再次关于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对象。

现在我们可以在这个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> 

在此示例中,一行带有指向品牌,品牌名称,产品名称,其描述,ID和价格的链接。

实用的 的一部分


让我们尝试获取所有上述数据。

 //   $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/zh-CN471644/


All Articles