QueryList は、phpQuery をベースとした、拡張性の高いシンプルでエレガントな PHP 収集ツールです。
1. jQuery とまったく同じ CSS3 DOM セレクターを使用する
2. jQueryと全く同じDOM操作APIを搭載
3. ユニバーサルなリスト収集ソリューションを用意する
4. 強力な HTTP リクエスト スイートにより、シミュレートされたログイン、偽のブラウザ、HTTP プロキシなどの複雑なネットワーク リクエストを簡単に実装できます。
5. 文字化けしたコードを解決する
6. 強力なコンテンツ フィルタリング機能があり、jQuey セレクターを使用してコンテンツをフィルタリングできます。
7. 高度なモジュール設計と強力な拡張性を備えています。
8. 表現力豊かな API を用意する
9. 高品質のドキュメントを用意する
10. 豊富なプラグインを備えています
11. 専門的な Q&A コミュニティとコミュニケーション グループを設ける
プラグインを使用すると、次のようなことを簡単に実装できます。
1. マルチスレッドの収集
2. JavaScript で動的にレンダリングされたページを収集する (PhantomJS/headless WebKit)
3. 画像のローカリゼーション
4. フォームフォームの送信など、ブラウザの動作をシミュレートします。
5. Web クローラー
6……
PHP >= 7.0
PHP がまだ PHP5 のままである場合、または Composer の使用方法がわからない場合は、QueryList3 が php5.3 をサポートし、手動インストールを使用することを選択できます。
Composer 経由でインストールします。
作曲家にはイェーガー/クエリリストが必要です
要素の操作
「Nitu.com」ですべての画像アドレスを収集する
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
Baidu の検索結果を収集する
$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');$ql->find('title')->text() // ウェブサイトのタイトルを取得 $ ql ->find('meta[name=keywords]')->content; // ウェブサイトのヘッダキーワードを取得 $ql->find('h3>a')->texts() // 検索結果のタイトルを取得list $ql->find('h3>a')->attrs('href'); //検索結果のリンクを取得 list $ql->find('img')->src; //最初の画像を取得リンクアドレス $ql->find('img:eq(1)')->src; //2 番目の画像のリンクアドレスを取得 $ql->find('img')->eq(2)->src; ; // 3 番目の画像のリンク アドレスを取得します // すべての画像を走査 $ql->find('img')->map(function($img){echo $img->alt; // alt 属性を出力します写真 });
さらなる使用法
$ql->find('#head')->append('
リストコレクション
Baidu 検索結果リストのタイトルとリンクを収集します。
$data = QueryList::get('http://www.baidu.com/s?wd=QueryList')// コレクションルールを設定->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
収集結果:
Array( [0] => Array ( [title] => QueryList | phpQuery に基づく非常に強力な PHP 収集ツール [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP は QueryList を使用して Web ページのコンテンツをクロールします - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [タイトル ] => はじめに - QueryList ガイダンス文書 [リンク] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
トランスコーディング
// 出力エンコーディング: UTF-8、入力エンコーディング: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->texts();//出力エンコーディング: UTF-8、入力エンコーディング: 自動認識 QueryList::get('https://top.etao.com')->encoding('UTF-8')-> find('a')->texts();
HTTP ネットワーク操作 (GuzzleHttp)
Cookie を使用して新浪微博にログインする
//アクセスするためにログインが必要な新浪微博からのページを収集 $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Fill in Cookie 'Cookie' ブラウザから取得 => 'wb_cmtLike_2112031=1; wvr=6;....' ]]);//echo $ql->getHtml();echo $ql-> find ('title')->text();//出力: 私のホームページ Weibo - いつでもどこでも新しいものを発見
HTTPプロキシを使用する
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// http プロキシを設定 'proxy' => 'http://222.141.11.17:8118', / /タイムアウトを設定します。単位: 秒 'timeout' => 30, // http ヘッダーを鍛造 '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();
模擬ログイン
// post を使用してログイン $ql = QueryList::post('http://xxxx.com/login',[ 'username' => 'admin', 'password' => '123456'])->get (' http://xxx.com/admin');//アクセスするためにログインが必要なページを収集 $ql->get('http://xxx.com/admin/page');//echo $ql- >getHtml();
フォームフォームの操作
GitHub へのログインをシミュレートする
// QueryList インスタンスを取得 $ql = QueryList::getInstance() // ログイン フォームを取得 $form = $ql->get('https://github.com/login')->find('form' ) ;//GitHub のユーザー名とパスワードを入力 $form->find('input[name=login]')->val('your github username or email');$form->find('input[name=パスワード]' )->val('あなたのgithubパスワード');//シリアル化されたフォームデータ $fromData = $form->serializeArray();$postData = [];foreach ($fromData as $item) { $postData[$ item[ 'name']] = $item['value'];}//ログインフォームを送信 $actionUrl = 'https://github.com'.$form->attr('action');$ql-> post( $actionUrl,$postData);//ログインが成功したかどうかを判断する// echo $ql->getHtml();$userName = $ql->find('.header-nav-current-user>.css- truncate-target' )->text();if($userName){ echo 'ログイン成功! ようこそ:'.$userName;}else{ echo 'ログインに失敗しました!';}
バインド機能拡張
myHttp メソッドをカスタマイズして拡張します。
$ql = QueryList::getInstance();// myHttp メソッドを QueryList オブジェクトにバインド $ql->bind('myHttp',function ($url){ // $this は現在の QueryList オブジェクト $html = file_get_contents( $url); $this->setHtml($html); return $this;});//その後、 $data = $ql->myHttp('https://toutiao.io' )->find( 'h3 a')->texts();print_r($data->all());
または、実装をクラスにカプセル化し、次のようにバインドします。
$ql->bind('myHttp',function ($url){ return new MyHttp($this,$url);});
プラグインの使用法
PhantomJS プラグインを使用して、動的にレンダリングされた JavaScript ページを収集します。
//インストール中に PhantomJS バイナリ ファイル パスを設定 $ql = QueryList::use(PhantomJs::class,'/usr/local/bin/phantomjs');//Toutiao モバイル ゲームを収集 $data = $ql->browser ( 'https://m.toutiao.com')->find('p')->texts();print_r($data->all());// HTTP プロキシを使用 $ql->browser(' https://m.toutiao.com',false,['--proxy' => '192.168.1.42:8080', '--proxy-type' => 'http'])
CURL マルチスレッド プラグインを使用して、マルチスレッドで GitHub ランキングを収集します。
$ql = QueryList::use(CurlMulti::class);$ql->curlMulti([ 'https://github.com/trending/php', 'https://github.com/trending/go', / /....more urls]) // 各タスクが正常に完了すると、このコールバックを呼び出します ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "現在の url:{$r['info ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // それぞれタスク失敗 callback->error(function ($errorInfo,CurlMulti $curl){ echo "現在の URL:{$errorInfo['info']['url']} rn"; print_r($errorInfo['error' ]);})->start([// 最大同時実行数 'maxThread' => 10, // エラー再試行数 'maxTry' => 3,]);
jae-jae/QueryList-PhantomJS: PhantomJS を使用して JavaScript で動的にレンダリングされたページを収集します
jae-jae/QueryList-CurlMulti: Curl マルチスレッド コレクション
jae-jae/QueryList-AbsoluteUrl: URL の相対パスを絶対パスに変換します
jae-jae/QueryList-Rule-Google : Google 検索エンジン
jae-jae/QueryList-Rule-Baidu: 百度検索エンジン