Novamente sobre o phpQuery

Saudações a todos. Recentemente, solicitei que fosse necessário puxar dados automaticamente para o site (em outras palavras, escreva um analisador).

O conteúdo do artigo:



Prefácio


Desde que eu trabalho no php, meus olhos caíram na biblioteca do phpQuery . É claro que concordo que existem muitas outras bibliotecas, incluindo a embutida no php por padrão , mas para um programador comum que trabalha como freelancer no fim de semana, você precisa de algum tipo de milagre. Felizmente, a preguiça nos leva a todos. Uma preguiça tcheca levou à criação do phpQuery.

Não encontrei nenhuma documentação em russo para esta biblioteca (talvez eu estivesse parecendo mal?). Encontrando várias perguntas dos novatos nos fóruns e não conseguindo ler a documentação em inglês, pensei em escrever este artigo. Observe que o artigo foi escrito principalmente para iniciantes .

Vamos começar


PhpQuery não é a biblioteca mais rápida, mas uma das. Com as versões mais recentes do php, é quase invisível. A carga principal, como antes, repousa no carregamento da página.
Possui muitos recursos que não são mencionados em muitos manuais em russo.
Alguns programadores, sem entender o phpQuery, correm para criar suas próprias bibliotecas (assim como nossos colegas do mundo js). Sim, esta biblioteca tem uma grande desvantagem - o código está desatualizado, mas funciona por si só.

Iniciar trabalhar


É muito difícil para os iniciantes entenderem imediatamente como o phpQuery funciona. Mas vou tentar "mastigar" todos os momentos difíceis, tanto quanto possível.

Muitos métodos desta biblioteca visam trabalhar com o Dom, como se estivéssemos trabalhando no jQuery. E os nomes dessas bibliotecas são os mais semelhantes possíveis.

E assim Primeiro, precisamos decidir sobre o site no qual pegaremos o código HTML. A propósito, isso não precisa ser um site. Se já temos html (xml) no arquivo (variável), podemos carregá-lo a partir daí.

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

Em seguida, precisamos passar o código resultante para o manipulador phpQuery

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

O método "newDocument ()" retornará um objeto dom com o qual podemos trabalhar.

Agora podemos encontrar algo nesse objeto dom. Vamos imaginar que estamos acessando uma página de um site onde existe esse bloco:

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

Neste exemplo, há uma linha com um link para a marca, nome da marca, nome do produto, sua descrição, ID e preço.

Prático parte de


Vamos tentar obter todos os dados acima.

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

Na saída, obtemos esta matriz:

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

Conclusão


PhpQuery é uma biblioteca muito útil, mas infelizmente muito pesada. Portanto, depois de analisar os elementos, é recomendável descarregar o documento:

 phpQuery::unloadDocuments(); 

Apesar da conveniência da biblioteca, recomendo que você não se acostume. Provavelmente é mais adequado para resolver pequenos problemas. Mas essa ainda é uma biblioteca um pouco desatualizada.

Esta biblioteca tem a capacidade de adicionar itens rapidamente. Mas abordaremos esse tópico no próximo artigo.

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


All Articles