QueryList adalah alat pengumpulan PHP sederhana dan elegan berdasarkan phpQuery, dengan skalabilitas tinggi.
1. Memiliki pemilih DOM CSS3 yang sama persis dengan jQuery
2. Memiliki API operasi DOM yang sama persis dengan jQuery
3. Miliki solusi pengumpulan daftar universal
4. Dengan rangkaian permintaan HTTP yang kuat, ia dapat dengan mudah mengimplementasikan permintaan jaringan yang kompleks seperti simulasi login, browser palsu, proxy HTTP, dll.
5. Memiliki solusi kode yang kacau
6. Memiliki fungsi pemfilteran konten yang kuat dan dapat menggunakan pemilih jQuey untuk memfilter konten.
7. Memiliki desain modular tingkat tinggi dan skalabilitas yang kuat.
8. Memiliki API yang ekspresif
9. Miliki dokumentasi berkualitas tinggi
10. Memiliki plugin yang kaya
11. Memiliki komunitas tanya jawab dan kelompok komunikasi yang profesional
Plug-in memudahkan penerapan hal-hal seperti
1. Koleksi multi-utas
2. Kumpulkan halaman JavaScript yang dirender secara dinamis (PhantomJS/WebKit tanpa kepala)
3. Lokalisasi gambar
4. Simulasikan perilaku browser, seperti mengirimkan formulir Formulir
5. Perayap web
6.......
PHP >= 7.0
Jika PHP Anda masih stuck di PHP5, atau Anda tidak tahu cara menggunakan Composer, Anda dapat memilih untuk menggunakan QueryList3. QueryList3 mendukung php5.3 dan instalasi manual.
Instal melalui Komposer:
komposer memerlukan jaeger/daftar kueri
Operasi elemen
Kumpulkan semua alamat gambar di "Nitu.com"
Daftar Kueri::dapatkan('http://www.nipic.com')->find('img')->attrs('src');
Kumpulkan hasil pencarian Baidu
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text(); // Dapatkan judul situs web $ ql ->find('meta[name=keywords]')->content; // Dapatkan kata kunci header situs web $ql->find('h3>a')->texts(); //Dapatkan daftar judul hasil pencarian $ql->find('h3>a')->attrs('href'); //Dapatkan daftar link hasil pencarian $ql->find('img')->src ; / /Dapatkan alamat link gambar pertama $ql->find('img:eq(1)')->src; //Dapatkan alamat link gambar kedua $ql->find('img') -> persamaan(2)->src; //Dapatkan alamat tautan dari gambar ketiga // Telusuri semua gambar $ql->find('img')->map(function($img){echo $img->alt; //Cetak atribut alt dari gambar gambar} );
Lebih banyak penggunaan
$ql->find('#head')->append('
Koleksi daftar
Kumpulkan judul dan tautan daftar hasil pencarian Baidu:
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// Tetapkan aturan pengumpulan->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
Hasil pengumpulan:
Array( [0] => Array ( [title] => QueryList | Alat pengumpulan PHP yang sangat kuat berdasarkan phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [judul] => PHP menggunakan QueryList untuk mengambil konten web - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [title] => Pendahuluan - Dokumen Panduan QueryList [link] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
transkode
// Pengkodean keluaran: UTF-8, pengkodean masukan: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->teks();// Pengkodean keluaran: UTF-8, pengkodean masukan: pengenalan otomatis QueryList::get('https://top.etao.com')->encoding('UTF-8')->find('a')->teks ();
Operasi jaringan HTTP (GuzzleHttp)
Masuk ke Sina Weibo dengan cookie
//Kumpulkan halaman dari Sina Weibo yang memerlukan login untuk mengakses $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Isi di Cookie 'Cookie' yang diperoleh dari browser => 'SINAGLOBAL=546064; wb_cmtLike_2112031=1; ]]);//echo $ql->getHtml();echo $ql->find('title')->text();//Output: Beranda saya Weibo - temukan hal-hal baru kapan saja, di mana saja
Gunakan proksi HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// Setel proksi http 'proxy' => 'http://222.141.11.17:8118', / /Tetapkan batas waktu, satuan: detik 'timeout' => 30, // Tempa header http 'headers' => [ 'Referer' => 'https://querylist.cc/', 'Agen-Pengguna' => 'pengujian/1.0', 'Terima' => 'aplikasi/json', 'X-Foo' => ['Bar', 'Baz' ], 'Cookie' => 'abc=111;xxx=222' ]];$ql->get('http://httpbin.org/get',$urlParams,$opts);// echo $ql->getHtml();
Simulasi masuk
// Gunakan postingan untuk login $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//Kumpulkan halaman yang memerlukan login untuk mengakses $ql->get('http://xxx.com/admin/page');//echo $ql- >dapatkanHtml();
Operasi formulir formulir
Simulasikan login ke GitHub
// Dapatkan instance QueryList $ql = QueryList::getInstance(); // Dapatkan formulir login $form = $ql->get('https://github.com/login')->find('form' ) ;//Isi nama pengguna dan kata sandi GitHub $form->find('input[name=login]')->val('nama pengguna github Anda atau email');$form->find('input[name=password]')->val('kata sandi github Anda');//Serialisasi data formulir $fromData = $form->serializeArray();$postData = [ ];foreach ($fromData sebagai $item) { $postData[$item['name']] = $item['value'];}//Kirim formulir login $actionUrl = 'https://github.com'.$form->attr('action');$ql->post($actionUrl,$postData);//Tentukan apakah login berhasil// echo $ql->getHtml () ;$userName = $ql->find('.header-nav-current-user>.css-truncate-target')->text();if($userName){ echo 'Login berhasil! Selamat datang:'.$userName;}else{ echo 'Login gagal!';}
Ekstensi fungsi ikat
Sesuaikan dan perluas metode myHttp:
$ql = QueryList::getInstance();//Ikat metode myHttp ke objek QueryList $ql->bind('myHttp',function ($url){ // $ini adalah objek QueryList saat ini $html = file_get_contents( $url); $this->setHtml($html); return $this;});//Kemudian Anda dapat memanggil $data = melalui nama yang terdaftar $ql->myHttp('https://toutiao.io')->find('h3 a')->texts();print_r($data->all());
Atau merangkum implementasinya ke dalam kelas dan mengikatnya seperti ini:
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
Penggunaan plugin
Gunakan plugin PhantomJS untuk mengumpulkan halaman JavaScript yang dirender secara dinamis:
//Setel jalur file biner PhantomJS selama instalasi $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Kumpulkan game seluler Toutiao $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// Gunakan proksi HTTP $ql->browser('https://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http '])
Gunakan plug-in multi-thread CURL untuk mengumpulkan peringkat GitHub di multi-thread:
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /.....lebih banyak url]) // Panggil panggilan balik ini untuk setiap tugas yang berhasil diselesaikan ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Saat ini url:{$r['info']['url']} rn"; $data = $ql->find('h3 a')->teks(); print_r($data->semua( ));}) // Setiap tugas gagal callback->error(function ($errorInfo,CurlMulti $curl){ echo "Url saat ini:{$errorInfo['info']['url']} rn" ; print_r($errorInfo['error']);})->start([//Jumlah maksimum concurrency'maxThread' => 10, //Jumlah error retries'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: Gunakan PhantomJS untuk mengumpulkan halaman JavaScript yang dirender secara dinamis
jae-jae/QueryList-CurlMulti: Koleksi multi-utas keriting
jae-jae/QueryList-AbsoluteUrl: Mengonversi jalur relatif URL ke jalur absolut
jae-jae/QueryList-Rule-Google : Mesin pencari Google
jae-jae/QueryList-Rule-Baidu: Mesin pencari Baidu