QueryList es una herramienta de recopilación PHP simple y elegante basada en phpQuery, con alta escalabilidad.
1. Tener exactamente el mismo selector DOM CSS3 que jQuery
2. Tiene exactamente la misma API de operación DOM que jQuery
3. Tener una solución universal de recopilación de listas.
4. Con un potente conjunto de solicitudes HTTP, puede implementar fácilmente solicitudes de red complejas, como inicio de sesión simulado, navegador falso, proxy HTTP, etc.
5. Tener una solución de código confuso
6. Tiene una poderosa función de filtrado de contenido y puede usar el selector jQuey para filtrar contenido.
7. Tiene un alto grado de diseño modular y una gran escalabilidad.
8. Tener una API expresiva
9. Contar con documentación de alta calidad
10. Tiene complementos enriquecidos
11. Tener una comunidad de preguntas y respuestas y un grupo de comunicación profesional.
Los complementos facilitan la implementación de cosas como
1. Colección multiproceso
2. Recopile páginas JavaScript renderizadas dinámicamente (PhantomJS/WebKit sin cabeza)
3. Localización de imágenes
4. Simule el comportamiento del navegador, como enviar un formulario.
5. Rastreador web
6.......
PHP >= 7.0
Si su PHP todavía está atascado en PHP5, o no sabe cómo usar Composer, puede optar por usar QueryList3 que admite php5.3 y la instalación manual.
Instalar a través de Composer:
el compositor requiere jaeger/lista de consultas
Operaciones de elementos
Recopile todas las direcciones de imágenes en "Nitu.com"
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Recopilar resultados de búsqueda de Baidu
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text() // Obtener el título del sitio web $ ql ->find('meta[name=keywords]')->content; // Obtener la palabra clave del encabezado del sitio web $ql->find('h3>a')->texts(); //Obtener la lista de títulos de resultados de búsqueda $ql->find('h3>a')->attrs('href'); //Obtener la lista de enlaces de resultados de búsqueda $ql->find('img')->src ; / /Obtener la dirección del enlace de la primera imagen $ql->find('img:eq(1)')->src; //Obtener la dirección del enlace de la segunda imagen $ql->find('img') -> ecuación(2)->src; //Obtener la dirección del enlace de la tercera imagen // Recorrer todas las imágenes $ql->find('img')->map(function($img){echo $img->alt; //Imprimir el atributo alt de la imagen} );
Más uso
$ql->find('#head')->append('
colección de listas
Recopile los títulos y enlaces de la lista de resultados de búsqueda de Baidu:
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Establecer reglas de colección->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Resultados de la colección:
Array( [0] => Array ( [title] => QueryList | Una herramienta de recopilación PHP extremadamente poderosa basada en phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [título] => PHP usa QueryList para capturar contenido web - wb145230 - Blog Park [enlace] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Matriz ( [título] => Introducción - Documento de orientación de QueryList [enlace] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx) //...)
transcodificación
// Codificación de salida: UTF-8, codificación de entrada: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->textos();// Codificación de salida: UTF-8, codificación de entrada: reconocimiento automático QueryList::get('https://top.etao.com')->encoding('UTF-8')->find('a')->texts ();
Operaciones de red HTTP (GuzzleHttp)
Inicie sesión en Sina Weibo con cookies
//Recopila páginas de Sina Weibo que requieren iniciar sesión para acceder $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Rellenar en Cookie 'Cookie' obtenida del navegador => 'SINAGLOBAL=546064 wb_cmtLike_2112031=1;....' ]]);//echo $ql->getHtml();echo $ql->find('title')->text();//Salida: Mi página de inicio Weibo: descubre cosas nuevas en cualquier momento y en cualquier lugar
Usar proxy HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// Establecer proxy http 'proxy' => 'http://222.141.11.17:8118', / / Establecer el tiempo de espera, unidad: segundos 'timeout' => 30, // Forjar encabezados http 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => 'testing/1.0', 'Aceptar' => 'application/json', 'X-Foo' => ['Bar', 'Baz' ], 'Cookie' => 'abc=111;xxx=222' ]];$ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Inicio de sesión simulado
// Usar publicación para iniciar sesión $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Recopilar páginas que requieren iniciar sesión para acceder $ql->get('http://xxx.com/admin/page');//echo $ql- >obtenerHtml ();
Operaciones de formulario
Simular inicio de sesión en GitHub
// Obtener la instancia de QueryList $ql = QueryList::getInstance(); // Obtener el formulario de inicio de sesión $form = $ql->get('https://github.com/login')->find('form' ) ;// Complete el nombre de usuario y la contraseña de GitHub $form->find('input[name=login]')->val('su nombre de usuario de github o email');$form->find('input[nombre=contraseña]')->val('tu contraseña de github');//Serializar datos del formulario $fromData = $form->serializeArray();$postData = [ ];foreach ($fromData as $item) { $postData[$item['name']] = $item['value'];}//Enviar formulario de inicio de sesión $actionUrl = 'https://github.com'.$form->attr('action');$ql->post($actionUrl,$postData);//Determinar si el inicio de sesión fue exitoso// echo $ql->getHtml () ;$nombre de usuario = $ql->find('.header-nav-current-user>.css-truncate-target')->text();if($nombre de usuario){ echo '¡Inicio de sesión exitoso! Bienvenido:'.$userName;}else{ echo '¡Error de inicio de sesión!';}
Extensión de función de enlace
Personalice y amplíe un método myHttp:
$ql = QueryList::getInstance();//Vincula un método myHttp al objeto QueryList $ql->bind('myHttp',function ($url){ // $este es el objeto QueryList actual $html = file_get_contents( $url); $this->setHtml($html); return $this;});// Luego puedes llamar a $data = a través del nombre registrado. $ql->myHttp('https://toutiao.io')->find('h3 a')->texts();print_r($data->all());
O encapsule la implementación en una clase y vincúlela así:
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
Uso de complementos
Utilice el complemento PhantomJS para recopilar páginas JavaScript renderizadas dinámicamente:
//Establece la ruta del archivo binario PhantomJS durante la instalación $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Recoge el juego móvil Toutiao $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// Utilice el proxy HTTP $ql->browser('https://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http '])
Utilice el complemento multiproceso CURL para recopilar clasificaciones de GitHub en subprocesos múltiples:
$ql = QueryList::use(CurlMulti::clase);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....más URL]) // Llame a esta devolución de llamada para cada tarea completada con éxito ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Actual url:{$r['info']['url']} rn"; $datos = $ql->find('h3 a')->textos(); print_r($datos->all( ));}) // Cada tarea falla callback->error(function ($errorInfo,CurlMulti $curl){ echo "Url actual:{$errorInfo['info']['url']} rn" ; print_r($errorInfo['error']);})->start([//Número máximo de concurrencia'maxThread' => 10, //Número de reintentos de error'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: Utilice PhantomJS para recopilar páginas JavaScript renderizadas dinámicamente
jae-jae/QueryList-CurlMulti: Colección multihilo Curl
jae-jae/QueryList-AbsoluteUrl: Convertir la ruta relativa de la URL en una ruta absoluta
jae-jae/QueryList-Rule-Google: motor de búsqueda de Google
jae-jae/QueryList-Rule-Baidu: motor de búsqueda de Baidu