QueryList est un outil de collecte PHP simple et élégant basé sur phpQuery, avec une grande évolutivité.
1. Avoir exactement le même sélecteur DOM CSS3 que jQuery
2. Possède exactement la même API d'opération DOM que jQuery
3. Avoir une solution universelle de collecte de listes
4. Grâce à une puissante suite de requêtes HTTP, il peut facilement implémenter des requêtes réseau complexes telles qu'une connexion simulée, un faux navigateur, un proxy HTTP, etc.
5. Avoir une solution de code tronquée
6. Il dispose d'une puissante fonction de filtrage de contenu et peut utiliser le sélecteur jQuey pour filtrer le contenu.
7. Il présente un haut degré de conception modulaire et une forte évolutivité.
8. Avoir une API expressive
9. Avoir une documentation de haute qualité
10. Possède de riches plug-ins
11. Avoir une communauté professionnelle de questions-réponses et un groupe de communication
Les plug-ins facilitent la mise en œuvre de choses comme
1. Collection multithread
2. Collectez les pages JavaScript rendues dynamiquement (PhantomJS/headless WebKit)
3. Localisation d'images
4. Simulez le comportement du navigateur, comme la soumission d'un formulaire
5. Robot d'exploration Web
6.......
PHP >= 7.0
Si votre PHP est toujours bloqué sur PHP5 ou si vous ne savez pas comment utiliser Composer, vous pouvez choisir d'utiliser QueryList3 qui prend en charge PHP5.3 et l'installation manuelle.
Installer via Composer :
le compositeur nécessite Jaeger/querylist
Opérations sur les éléments
Collectez toutes les adresses d'images sur "Nitu.com"
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Collecter les résultats de recherche Baidu
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text(); // Récupère le titre du site Web $ ql ->find('meta[name=keywords]')->content; // Récupère le mot-clé de l'en-tête du site Web $ql->find('h3>a')->texts(); // Récupère le titre du résultat de la recherche list $ql->find('h3>a')->attrs('href'); //Obtenir le lien des résultats de la recherche list $ql->find('img')->src //Obtenir la première image Adresse du lien $ql->find('img:eq(1)')->src; //Obtenir l'adresse du lien de la deuxième image $ql->find('img')->eq(2)->src ; //Obtenir l'adresse du lien de la troisième image // Parcourir toutes les images $ql->find('img')->map(function($img){echo $img->alt; //Imprimer l'attribut alt de la photo });
Plus d'utilisation
$ql->find('#head')->append('
Collection de listes
Collectez les titres et les liens de la liste des résultats de recherche Baidu :
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Définir les règles de collection->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Résultats de la collecte :
Array( [0] => Array ( [title] => QueryList | Un outil de collecte PHP extrêmement puissant basé sur phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP utilise QueryList pour explorer le contenu des pages Web - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [ titre ] => Introduction - Document d'orientation QueryList [lien] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
transcodage
// Encodage de sortie : UTF-8, encodage d'entrée : GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->texts();//Encodage de sortie : UTF-8, encodage d'entrée : reconnaissance automatique QueryList::get('https://top.etao.com')->encoding('UTF-8')-> find('a')->textes();
Opérations réseau HTTP (GuzzleHttp)
Connectez-vous à Sina Weibo avec des cookies
//Collectez les pages de Sina Weibo qui nécessitent une connexion pour accéder à $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Remplir dans le Cookie 'Cookie' obtenu depuis le navigateur => 'SINAGLOBAL=546064; wb_cmtLike_2112031=1; wvr=6;....' ]]);//echo $ql->getHtml();echo $ql-> find ("title")->text();//Sortie : Ma page d'accueil Weibo - découvrez de nouvelles choses à tout moment et n'importe où
Utiliser un proxy HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// Définir le proxy http 'proxy' => 'http://222.141.11.17:8118', / /Définir le délai d'attente, unité : secondes 'timeout' => 30, // Forge http headers 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => ' testing/1.0', 'Accepter' => 'application/json', 'X-Foo' => ['Bar', 'Baz'], 'Cookie' => 'abc=111;xxx=222' ]]; $ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Connexion simulée
// Utilisez post pour vous connecter $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Collecter les pages qui nécessitent une connexion pour accéder à $ql->get('http://xxx.com/admin/page');//echo $ql- >getHtml ();
Opérations de formulaire de formulaire
Simuler la connexion à GitHub
// Récupère l'instance QueryList $ql = QueryList::getInstance(); // Récupère le formulaire de connexion $form = $ql->get('https://github.com/login')->find('form' ) ;//Remplissez le nom d'utilisateur et le mot de passe GitHub $form->find('input[name=login]')->val('votre nom d'utilisateur ou email github');$form->find('input[name= password]' )->val('votre mot de passe github');//Données de formulaire sérialisées $fromData = $form->serializeArray();$postData = [];foreach ($fromData as $item) { $postData[$ item[ 'name']] = $item['value'];}//Soumettre le formulaire de connexion $actionUrl = 'https://github.com'.$form->attr('action');$ql-> post( $actionUrl,$postData);//Déterminer si la connexion a réussi// echo $ql->getHtml();$userName = $ql->find('.header-nav-current-user>.css- truncate-target' )->text();if($userName){ echo 'Connexion réussie Bienvenue :'.$userName;}else{ echo 'Échec de la connexion !';}
Extension de la fonction de liaison
Personnalisez et étendez une méthode myHttp :
$ql = QueryList::getInstance();//Lier une méthode myHttp à l'objet QueryList $ql->bind('myHttp',function ($url){ // $this est l'objet QueryList actuel $html = file_get_contents( $url); $this->setHtml($html); return $this;});//Ensuite, vous pouvez appeler $data = $ql->myHttp('https://toutiao.io' )->find( 'h3 a')->texts();print_r($data->all());
Ou encapsulez l'implémentation dans une classe et liez-la comme ceci :
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
Utilisation du plug-in
Utilisez le plug-in PhantomJS pour collecter les pages JavaScript rendues dynamiquement :
//Définissez le chemin du fichier binaire PhantomJS lors de l'installation $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Collectez le jeu mobile Toutiao $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// Utiliser le proxy HTTP $ql->browser(' https ://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http'])
Utilisez le plug-in multi-thread CURL pour collecter les classements GitHub en multi-thread :
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....plus d'urls]) // Appelez ce rappel lorsque chaque tâche est terminée avec succès ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "URL actuelle :{$r['info ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // chacun Rappel d'échec de la tâche->error(function ($errorInfo,CurlMulti $curl){ echo "URL actuelle :{$errorInfo['info']['url']} rn"; print_r($errorInfo['error' ]);})->start([// Nombre maximum de concurrence 'maxThread' => 10, // Nombre de tentatives d'erreur 'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS : utilisez PhantomJS pour collecter les pages JavaScript rendues dynamiquement
jae-jae/QueryList-CurlMulti : collection multithread Curl
jae-jae/QueryList-AbsoluteUrl : convertir le chemin relatif de l'URL en chemin absolu
jae-jae/QueryList-Rule-Google : moteur de recherche Google
jae-jae/QueryList-Rule-Baidu : moteur de recherche Baidu