QueryList هي أداة تجميع PHP بسيطة وأنيقة تعتمد على phpQuery، مع قابلية تطوير عالية.
1. لديك نفس محدد CSS3 DOM مثل jQuery
2. لديه نفس واجهة برمجة تطبيقات عملية DOM تمامًا مثل jQuery
3. لديك حل جمع قائمة عالمية
4. باستخدام مجموعة طلبات HTTP القوية، يمكنه بسهولة تنفيذ طلبات الشبكة المعقدة مثل تسجيل الدخول المحاكي، والمتصفح المزيف، وكيل HTTP، وما إلى ذلك.
5. احصل على حل رمز مشوه
6. لديه وظيفة تصفية محتوى قوية ويمكنه استخدام محدد jQuey لتصفية المحتوى.
7. إنه يتمتع بدرجة عالية من التصميم المعياري وقابلية التوسع القوية.
8. لديك واجهة برمجة تطبيقات معبرة
9. احصل على وثائق عالية الجودة
10. يحتوي على مكونات إضافية غنية
11. امتلك مجتمعًا متخصصًا للأسئلة والأجوبة ومجموعة تواصل
تسهل المكونات الإضافية تنفيذ أشياء مثل
1. مجموعة متعددة الخيوط
2. جمع صفحات JavaScript المعروضة ديناميكيًا (PhantomJS/Headless WebKit)
3. توطين الصور
4. محاكاة سلوك المتصفح، مثل إرسال نموذج نموذج
5. زاحف الويب
6.......
بي إتش بي >= 7.0
إذا كان PHP الخاص بك لا يزال عالقًا في PHP5، أو إذا كنت لا تعرف كيفية استخدام Composer، فيمكنك اختيار استخدام QueryList3 الذي يدعم php5.3 والتثبيت اليدوي.
التثبيت عبر الملحن:
يتطلب الملحن جايجر/قائمة الاستعلام
عمليات العناصر
اجمع كل عناوين الصور على "Nitu.com"
QueryList::get('http://www.nipic.com')->find('img')->attrs('src');
جمع نتائج البحث بايدو
$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(); // احصل على قائمة عناوين نتائج البحث $ql->find('h3>a')->attrs('href'); // احصل على قائمة روابط نتائج البحث $ql->find('img')->src // احصل على عنوان رابط الصورة الأولى $ql->find('img:eq(1)')->src; // احصل على عنوان رابط الصورة الثانية $ql->find('img') -> مكافئ(2)->src; // احصل على عنوان رابط الصورة الثالثة // اجتياز جميع الصور $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 | أداة تجميع PHP قوية للغاية تعتمد على phpQuery [رابط] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => يستخدم PHP QueryList للحصول على محتوى الويب - wb145230 - حديقة المدونة [رابط] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [title] => مقدمة - وثيقة إرشادات قائمة الاستعلام [رابط] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
تحويل الشفرة
// ترميز الإخراج: UTF-8، ترميز الإدخال: GB2312QueryList::get('https://top.etao.com')->encoding('UTF-8','GB2312')->find('a' )->النصوص ()؛// ترميز الإخراج: UTF-8، ترميز الإدخال: التعرف التلقائي QueryList::get('https://top.etao.com')->encoding('UTF-8')->find('a')->texts ()؛
عمليات شبكة HTTP (GuzzleHttp)
قم بتسجيل الدخول إلى Sina Weibo باستخدام ملفات تعريف الارتباط
// اجمع الصفحات من Sina Weibo التي تتطلب تسجيل الدخول للوصول إلى $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //Fill في ملف تعريف الارتباط "ملف تعريف الارتباط" الذي تم الحصول عليه من المتصفح => 'SINAGLOBAL=546064; ]]);//echo $ql->getHtml();echo $ql->find('title')->text();//الإخراج: صفحتي الرئيسية على Weibo - اكتشف أشياء جديدة في أي وقت وفي أي مكان
استخدم وكيل HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// تعيين وكيل http 'proxy' => 'http://222.141.11.17:8118', / / اضبط المهلة، الوحدة: ثانية 'مهلة' => 30، // صياغة رؤوس http 'headers' => [ 'Referer' => 'https://querylist.cc/', 'User-Agent' => 'test/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();
تسجيل الدخول محاكاة
// استخدم المنشور لتسجيل الدخول $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();
عمليات النموذج
محاكاة تسجيل الدخول إلى جيثب
// احصل على مثيل QueryList $ql = QueryList::getInstance(); // احصل على نموذج تسجيل الدخول $form = $ql->get('https://github.com/login')->find('form' ) ;// املأ اسم المستخدم وكلمة المرور لـ GitHub $form->find('input[name=login]')->val('اسم مستخدم github الخاص بك أو email');$form->find('input[name=password]')->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){ صدى 'تم تسجيل الدخول بنجاح! مرحبًا:'.$userName;}else{ echo 'فشل تسجيل الدخول!';}
ربط ملحق الوظيفة
تخصيص وتوسيع طريقة myHttp:
$ql = QueryList::getInstance();// ربط أسلوب myHttp بكائن QueryList $ql->bind('myHttp',function ($url){ // $هذا هو كائن 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', / /..... المزيد من عناوين url]) // استدعاء رد الاتصال هذا لكل مهمة تم إكمالها بنجاح ->success(function (QueryList $ql,CurlMulti $curl,$r){ echo "Current url:{$r['info']['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all( ));}) // تفشل كل مهمة callback->error(function ($errorInfo,CurlMulti $curl){ echo "Current 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 : محرك بحث جوجل
jae-jae/QueryList-Rule-Baidu: محرك بحث بايدو