QueryList é uma ferramenta de coleta PHP simples e elegante baseada em phpQuery, com alta escalabilidade.
1. Tenha exatamente o mesmo seletor CSS3 DOM do jQuery
2. Possui exatamente a mesma API de operação DOM que jQuery
3. Tenha uma solução universal de coleta de listas
4. Com um poderoso conjunto de solicitações HTTP, ele pode implementar facilmente solicitações de rede complexas, como login simulado, navegador falso, proxy HTTP, etc.
5. Tenha uma solução de código ilegível
6. Possui poderosa função de filtragem de conteúdo e pode usar o seletor jQuey para filtrar conteúdo.
7. Possui um alto grau de design modular e forte escalabilidade.
8. Tenha uma API expressiva
9. Tenha documentação de alta qualidade
10. Possui plug-ins avançados
11. Tenha uma comunidade profissional de perguntas e respostas e um grupo de comunicação
Os plug-ins facilitam a implementação de coisas como
1. Coleção multithread
2. Colete páginas JavaScript renderizadas dinamicamente (PhantomJS/headless WebKit)
3. Localização de imagem
4. Simule o comportamento do navegador, como enviar um formulário
5. Rastreador da Web
6.......
PHP >= 7.0
Se o seu PHP ainda está travado no PHP5 ou você não sabe como usar o Composer, você pode optar por usar o QueryList3 com suporte para php5.3 e instalação manual.
Instale via Composer:
compositor requer jaeger/querylist
Operações de elemento
Colete todos os endereços de imagens em "Nitu.com"
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Colete resultados de pesquisa do Baidu
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text(); ql ->find('meta[name=keywords]')->content; // Obtenha a palavra-chave do cabeçalho do site $ql->find('h3>a')->texts(); list $ql->find('h3>a')->attrs('href'); //Obtém o link do resultado da pesquisa list $ql->find('img')->src; Endereço do link $ql->find('img:eq(1)')->src; //Obtém o endereço do link da segunda imagem $ql->find('img')->eq(2)->src; ; //Obtém o endereço do link da terceira imagem // Percorre todas as imagens $ql->find('img')->map(function($img){echo $img->alt; //Imprime o atributo alt de a imagem });
Mais uso
$ql->find('#head')->append('
Coleção de lista
Colete os títulos e links da lista de resultados de pesquisa do Baidu:
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Definir regras de coleta->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Resultados da coleta:
Array( [0] => Array ( [title] => QueryList | Uma ferramenta de coleta PHP extremamente poderosa baseada em phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP usa QueryList para rastrear o conteúdo da página da web - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [ title ] => Introdução - documento de orientação QueryList [link] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
transcodificação
// Codificação de saída: UTF-8, codificação de entrada: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->texts();//Codificação de saída: UTF-8, codificação de entrada: reconhecimento automático QueryList::get('https://top.etao.com')->encoding('UTF-8')-> find('a')->textos();
Operações de rede HTTP (GuzzleHttp)
Faça login no Sina Weibo com cookies
//Coleta páginas do Sina Weibo que requerem login para acessar $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Preencher no Cookie 'Cookie' obtido do navegador => 'SINAGLOBAL=546064; wb_cmtLike_2112031=1;....' ]]);//echo $ql->getHtml();echo $ql-> find ('title')->text();//Saída: Minha página inicial Weibo - descubra coisas novas a qualquer hora e em qualquer lugar
Usar proxy HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// Definir proxy http 'proxy' => 'http://222.141.11.17:8118', / /Definir o tempo limite, unidade: segundos 'timeout' => 30, // Forja cabeçalhos http 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => ' testando/1.0', 'Aceitar' => 'aplicativo/json', 'X-Foo' => ['Bar', 'Baz'], 'Cookie' => 'abc=111;xxx=222' ]]; $ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Login simulado
// Use post para fazer login $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Coleta páginas que requerem login para acessar $ql->get('http://xxx.com/admin/page');//echo $ql- >getHtml();
Operações de formulário de formulário
Simular login no GitHub
// Obtenha a instância de QueryList $ql = QueryList::getInstance(); // Obtenha o formulário de login $form = $ql->get('https://github.com/login')->find('form' ) ;//Preencha o nome de usuário e senha do GitHub $form->find('input[name=login]')->val('seu nome de usuário ou email do github');$form->find('input[name= password]' )->val('sua senha do github');//Dados do formulário serializado $fromData = $form->serializeArray();$postData = [];foreach ($fromData as $item) { $postData[$ item[ 'name']] = $item['value'];}//Enviar formulário de login $actionUrl = 'https://github.com'.$form->attr('action');$ql-> post( $actionUrl,$postData);//Determina se o login foi bem sucedido// echo $ql->getHtml();$userName = $ql->find('.header-nav-current-user>.css- truncate-target' )->text();if($userName){ echo 'Login bem-vindo:'.$userName;}else{ echo 'Falha no login!';}
Extensão da função de vinculação
Personalize e estenda um método myHttp:
$ql = QueryList::getInstance(); // Vincula um método myHttp ao objeto QueryList $ql->bind('myHttp',function ($url){ // $este é o objeto QueryList atual $html = file_get_contents( $url); $this->setHtml($html); return $this;});//Então você pode chamar $data = $ql->myHttp('https://toutiao.io' )->find( 'h3 a')->textos();print_r($dados->all());
Ou encapsule a implementação em uma classe e vincule-a assim:
$ql->bind('meuHttp',function ($url){ return new MeuHttp($este,$url);});
Uso de plug-ins
Use o plug-in PhantomJS para coletar páginas JavaScript renderizadas dinamicamente:
//Defina o caminho do arquivo binário PhantomJS durante a instalação $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Colete o jogo móvel Toutiao $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// Usar proxy HTTP $ql->browser(' https://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http'])
Use o plug-in CURL multithread para coletar classificações do GitHub em multithreads:
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....mais urls]) // Chame esse retorno de chamada quando cada tarefa for concluída com sucesso ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Current URL:{$r['info ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // cada Retorno de chamada de falha de tarefa->error(function ($errorInfo,CurlMulti $curl){ echo "URL atual:{$errorInfo['info']['url']} rn"; print_r($errorInfo['error' ]);})->start([// Número máximo de simultaneidade 'maxThread' => 10, // Número de novas tentativas de erro 'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: Use PhantomJS para coletar páginas JavaScript renderizadas dinamicamente
jae-jae/QueryList-CurlMulti: Curl coleção multi-thread
jae-jae/QueryList-AbsoluteUrl: Converter caminho relativo do URL em caminho absoluto
jae-jae/QueryList-Rule-Google: mecanismo de pesquisa do Google
jae-jae/QueryList-Rule-Baidu: mecanismo de pesquisa Baidu