Un saludo a todos. Recientemente, tomé una orden donde era necesario extraer automáticamente los datos al sitio (en otras palabras, escribir un analizador sintáctico).
El contenido del artículo:
Prólogo
Como trabajo en php, mis ojos se posaron en la biblioteca
phpQuery . Por supuesto, estoy de acuerdo en que hay muchas otras bibliotecas, incluida la que está
integrada en php por defecto , pero para un programador ordinario que trabaja por cuenta propia durante el fin de semana, necesita algún tipo de milagro. Afortunadamente, la pereza nos impulsa a todos. Una pereza checa condujo a la creación de phpQuery.
No encontré ninguna documentación en ruso para esta biblioteca (¿tal vez estaba buscando mal?). Al encontrar un montón de preguntas de los recién llegados a los foros y no poder leer la documentación en inglés, pensé en escribir este artículo. Tenga en cuenta que el artículo fue escrito principalmente
para principiantes .
Empecemos
PhpQuery no es la biblioteca más rápida, sino una. Con las nuevas versiones de php es casi invisible. La carga principal, como antes, descansa con la carga de la página.
Tiene muchas características que no se mencionan en muchos manuales en ruso.
Algunos programadores, al no haber entendido phpQuery, corren para crear sus propias bibliotecas (al igual que nuestros colegas del mundo js). Sí, esta biblioteca tiene un inconveniente importante: el código está desactualizado, pero funciona por sí solo.
Inicio trabajar
Es bastante difícil para los principiantes comprender de inmediato cómo funciona phpQuery. Pero intentaré "masticar" todos los momentos difíciles tanto como sea posible.
Muchos métodos de esta biblioteca están destinados a trabajar con Dom, como si estuviéramos trabajando en jQuery. Y los nombres de estas bibliotecas son lo más similares posible.
Y asi. Primero, tenemos que decidir sobre el sitio del que recogeremos el código HTML. Por cierto, esto no tiene que ser un sitio. Si ya tenemos html (xml) en el archivo (variable), entonces podemos cargarlo desde allí.
$html = file_get_contents("$siteName");
A continuación, debemos pasar el código resultante al controlador phpQuery
$dom = phpQuery::newDocument($html);
El método "newDocument ()" devolverá un objeto dom con el que podemos trabajar.
Ahora podemos encontrar algo en este objeto dom. Imaginemos que estamos abriendo una página de un sitio donde existe dicho bloqueo:
<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>
En este ejemplo, hay una línea con un enlace a la marca, el nombre de la marca, el nombre del producto, su descripción, ID y precio.
Práctico parte de
Intentemos obtener todos los datos anteriores.
En la salida, obtenemos esta matriz:
Array ( [0] => Array ( [brand-href] => https://-_.com/-_ [brand-name] => - [product-name] => Jeans Denim [product-price] => € 200 [product-description] => [product-id] => 830214303 ) )
Conclusión
PhpQuery es una biblioteca muy útil, pero desafortunadamente demasiado pesada. Entonces, después de pasar por los elementos, se recomienda descargar el documento:
phpQuery::unloadDocuments();
A pesar de la conveniencia de la biblioteca, le aconsejo que no se acostumbre. Probablemente sea el más adecuado para resolver pequeños problemas. Pero esto todavía es una biblioteca un poco desactualizada.
Esta biblioteca tiene la capacidad de agregar elementos sobre la marcha. Pero tocaremos este tema en el próximo artículo.