QueryList ist ein einfaches und elegantes PHP-Erfassungstool basierend auf phpQuery mit hoher Skalierbarkeit.
1. Verwenden Sie genau den gleichen CSS3-DOM-Selektor wie jQuery
2. Hat genau die gleiche DOM-Operations-API wie jQuery
3. Verfügen Sie über eine universelle Listensammlungslösung
4. Mit einer leistungsstarken HTTP-Anforderungssuite können komplexe Netzwerkanforderungen wie simulierte Anmeldung, gefälschter Browser, HTTP-Proxy usw. problemlos implementiert werden.
5. Haben Sie eine Lösung mit verstümmeltem Code
6. Es verfügt über eine leistungsstarke Inhaltsfilterfunktion und kann den jQuey-Selektor zum Filtern von Inhalten verwenden.
7. Es verfügt über ein hohes Maß an Modularität und starke Skalierbarkeit.
8. Verfügen Sie über eine ausdrucksstarke API
9. Verfügen Sie über eine hochwertige Dokumentation
10. Verfügt über umfangreiche Plug-Ins
11. Richten Sie eine professionelle Q&A-Community und Kommunikationsgruppe ein
Plug-Ins erleichtern die Implementierung von Dingen wie
1. Multithread-Sammlung
2. Sammeln Sie dynamisch gerenderte JavaScript-Seiten (PhantomJS/headless WebKit)
3. Bildlokalisierung
4. Simulieren Sie das Browserverhalten, z. B. das Absenden eines Formulars
5. Webcrawler
6.......
PHP >= 7.0
Wenn Ihr PHP immer noch bei PHP5 hängen bleibt oder Sie nicht wissen, wie man Composer verwendet, können Sie QueryList3 verwenden, das PHP5.3 und die manuelle Installation unterstützt.
Installation über Composer:
Komponist benötigt Jaeger/Querylist
Elementoperationen
Sammeln Sie alle Bildadressen auf „Nitu.com“
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Sammeln Sie Baidu-Suchergebnisse
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text(); // Den Website-Titel abrufen $ ql ->find('meta[name=keywords]')->content; // Holen Sie sich das Schlüsselwort für den Website-Header $ql->find('h3>a')->texts(); list $ql->find('h3>a')->attrs('href'); //Suchergebnis-Link abrufen list $ql->find('img')->src; //Erstes Bild abrufen Linkadresse $ql->find('img:eq(1)')->src; //Linkadresse des zweiten Bildes abrufen $ql->find('img')->eq(2)->src ; //Linkadresse des dritten Bildes abrufen // Alle Bilder durchlaufen $ql->find('img')->map(function($img){echo $img->alt; //Das Alt-Attribut von drucken das Bild });
Mehr Nutzung
$ql->find('#head')->append('
Listensammlung
Sammeln Sie die Titel und Links der Baidu-Suchergebnisliste:
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Sammlungsregeln festlegen->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Sammlungsergebnisse:
Array( [0] => Array ( [title] => QueryList | Ein äußerst leistungsstarkes PHP-Erfassungstool basierend auf phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP verwendet QueryList zum Crawlen von Webseiteninhalten - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [ Titel ] => Einführung – QueryList-Leitdokument [Link] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
Transkodierung
// Ausgabekodierung: UTF-8, Eingabekodierung: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->texts();//Ausgabekodierung: UTF-8, Eingabekodierung: automatische Erkennung QueryList::get('https://top.etao.com')->encoding('UTF-8')-> find('a')->texts();
HTTP-Netzwerkoperationen (GuzzleHttp)
Melden Sie sich mit Cookies bei Sina Weibo an
//Seiten von Sina Weibo sammeln, für deren Zugriff eine Anmeldung erforderlich ist $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Füllen in Cookie 'Cookie' vom Browser erhalten => 'SINAGLOBAL=546064; wb_cmtLike_2112031=1; wvr=6;....' ]]);//echo $ql->getHtml();echo $ql-> find ('title')->text();//Ausgabe: Meine Homepage Weibo – jederzeit und überall Neues entdecken
Verwenden Sie einen HTTP-Proxy
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// HTTP-Proxy festlegen 'proxy' => 'http://222.141.11.17:8118', / /Stellen Sie das Timeout ein, Einheit: Sekunden 'timeout' => 30, // HTTP-Header fälschen 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => ' testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'], 'Cookie' => 'abc=111;xxx=222' ]]; $ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Simulierter Login
// Mit post anmelden $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Seiten sammeln, die eine Anmeldung erfordern, um darauf zuzugreifen $ql->get('http://xxx.com/admin/page');//echo $ql- >getHtml ();
Formularformularoperationen
Simulieren Sie die Anmeldung bei GitHub
// Holen Sie sich die QueryList-Instanz $ql = QueryList::getInstance(); // Holen Sie sich das Anmeldeformular $form = $ql->get('https://github.com/login')->find('form' ) ;//Geben Sie den GitHub-Benutzernamen und das Passwort ein $form->find('input[name=login]')->val('your github username or email');$form->find('input[name= Passwort]' )->val('Ihr Github-Passwort');//Serialisierte Formulardaten $fromData = $form->serializeArray();$postData = [];foreach ($fromData as $item) { $postData[$ item[ 'name']] = $item['value'];}//Anmeldeformular senden $actionUrl = 'https://github.com'.$form->attr('action');$ql-> post( $actionUrl,$postData);//Bestimmen Sie, ob die Anmeldung erfolgreich war// echo $ql->getHtml();$userName = $ql->find('.header-nav-current-user>.css- truncate-target' )->text();if($userName){ echo 'Anmeldung erfolgreich! Willkommen:'.$userName;}else{ echo 'Anmeldung fehlgeschlagen!';}
Bind-Funktionserweiterung
Passen Sie eine myHttp-Methode an und erweitern Sie sie:
$ql = QueryList::getInstance();//Binden Sie eine myHttp-Methode an das QueryList-Objekt $ql->bind('myHttp',function ($url){ // $this ist das aktuelle QueryList-Objekt $html = file_get_contents( $url); $this->setHtml($html); return $this;});//Dann können Sie $data = $ql->myHttp('https://toutiao.io' )->find( 'h3 a')->texts();print_r($data->all());
Oder kapseln Sie die Implementierung in eine Klasse und binden Sie sie wie folgt:
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
Plug-in-Nutzung
Verwenden Sie das PhantomJS-Plug-in, um dynamisch gerenderte JavaScript-Seiten zu sammeln:
//Legen Sie den PhantomJS-Binärdateipfad während der Installation fest $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Sammeln Sie das Toutiao-Handyspiel $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// HTTP-Proxy verwenden $ql->browser(' https ://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http'])
Verwenden Sie das CURL-Multi-Thread-Plug-in, um GitHub-Rankings in Multi-Threads zu sammeln:
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....mehr URLs]) // Rufen Sie diesen Rückruf auf, wenn jede Aufgabe erfolgreich abgeschlossen wurde ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Current url:{$r['info ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // Each Aufgabenfehler callback->error(function ($errorInfo,CurlMulti $curl){ echo "Current url:{$errorInfo['info']['url']} rn"; print_r($errorInfo['error' ]);})->start([// Maximale Anzahl der Parallelität 'maxThread' => 10, // Anzahl der Fehlerwiederholungen 'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: Verwenden Sie PhantomJS, um dynamisch gerenderte JavaScript-Seiten zu sammeln
jae-jae/QueryList-CurlMulti: Curl-Multithread-Sammlung
jae-jae/QueryList-AbsoluteUrl: Konvertieren Sie den relativen URL-Pfad in einen absoluten Pfad
jae-jae/QueryList-Rule-Google: Google-Suchmaschine
jae-jae/QueryList-Rule-Baidu: Baidu-Suchmaschine