QueryList เป็นเครื่องมือรวบรวม PHP ที่เรียบง่ายและสวยงามโดยใช้ phpQuery ซึ่งมีความสามารถในการปรับขนาดสูง
1. มีตัวเลือก CSS3 DOM เดียวกันกับ jQuery
2. มี API การดำเนินการ DOM เดียวกันกับ jQuery ทุกประการ
3. มีโซลูชันการรวบรวมรายการสากล
4. ด้วยชุดคำขอ HTTP ที่มีประสิทธิภาพ ทำให้สามารถดำเนินการคำขอเครือข่ายที่ซับซ้อน เช่น การเข้าสู่ระบบจำลอง เบราว์เซอร์ปลอม พร็อกซี HTTP ฯลฯ ได้อย่างง่ายดาย
5. มีวิธีแก้ปัญหารหัสที่อ่านไม่ออก
6. มีฟังก์ชันการกรองเนื้อหาที่มีประสิทธิภาพและสามารถใช้ตัวเลือก jQuey เพื่อกรองเนื้อหาได้
7. มีการออกแบบโมดูลาร์ในระดับสูงและมีความสามารถในการปรับขนาดที่แข็งแกร่ง
8. มี API ที่แสดงออก
9. มีเอกสารคุณภาพสูง
10. มีปลั๊กอินมากมาย
11. มีชุมชนถามตอบและกลุ่มสื่อสารอย่างมืออาชีพ
ปลั๊กอินทำให้ง่ายต่อการใช้งานสิ่งต่าง ๆ เช่น
1. คอลเลกชันแบบมัลติเธรด
2. รวบรวมหน้าที่แสดงผล JavaScript แบบไดนามิก (PhantomJS/headless WebKit)
3. การแปลรูปภาพ
4. จำลองพฤติกรรมของเบราว์เซอร์ เช่น การส่งแบบฟอร์ม
5. โปรแกรมรวบรวมข้อมูลเว็บ
6.......
PHP >= 7.0
หาก PHP ของคุณยังคงติดอยู่ที่ PHP5 หรือคุณไม่รู้วิธีใช้ Composer คุณสามารถเลือกใช้ QueryList3 ได้ QueryList3 รองรับ php5.3 และการติดตั้งด้วยตนเอง
ติดตั้งผ่านนักแต่งเพลง:
ผู้แต่งต้องการ jaeger/querylist
การดำเนินงานองค์ประกอบ
รวบรวมที่อยู่รูปภาพทั้งหมดบน "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(); // รับรายการชื่อผลการค้นหา $ql->find('h3>a')->attrs('href'); // รับรายการลิงก์ผลการค้นหา $ql->find('img')->src ; / /รับที่อยู่ลิงก์ของรูปภาพแรก $ql->find('img:eq(1)')->src; // รับที่อยู่ลิงก์ของรูปภาพที่สอง $ql->find('img') -> eq(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')// ตั้งกฎการรวบรวม->กฎ ([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
ผลการรวบรวม:
Array( [0] => Array ( [title] => QueryList | เครื่องมือรวบรวม PHP ที่ทรงพลังอย่างยิ่งโดยใช้ phpQuery [link] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > Array ( [title] => PHP ใช้ QueryList เพื่อดึงเนื้อหาเว็บ - wb145230 - Blog Park [link] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => Array ( [title] => บทนำ - QueryList Guidance Document [link] => http://www.baidu.com/link?url=pSypvMovqS4v2sWeQo5fDBJ4EoYhXYi0Lxx ) //...)
การแปลงรหัส
// การเข้ารหัสเอาต์พุต: UTF-8, การเข้ารหัสอินพุต: GB2312QueryList::get('https://top.etao.com')->การเข้ารหัส('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; wb_cmtLike_2112031=1; ]]);//echo $ql->getHtml();echo $ql->find('title')->text();//Output: หน้าแรกของฉัน Weibo - ค้นพบสิ่งใหม่ ๆ ทุกที่ทุกเวลา
ใช้พร็อกซี HTTP
$urlParams = ['param1' => 'testvalue','params2' => 'somevalue'];$opts = [// ตั้งค่าพร็อกซี http 'proxy' => 'http://222.141.11.17:8118', / /ตั้งค่าการหมดเวลา หน่วย: วินาที 'หมดเวลา' => 30, // ปลอมส่วนหัว http 'ส่วนหัว' => [ 'ผู้อ้างอิง' => 'https://querylist.cc/', 'User-Agent' => 'การทดสอบ/1.0', 'ยอมรับ' => 'application/json', 'X-Foo' => ['บาร์', 'Baz' ], 'คุกกี้' => '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 ();
การดำเนินงานของแบบฟอร์ม
จำลองการเข้าสู่ระบบ GitHub
// รับอินสแตนซ์ 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){ echo 'เข้าสู่ระบบสำเร็จ! ยินดีต้อนรับ:'.$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->เบราว์เซอร์ ( '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( ));}) // แต่ละงานล้มเหลวในการเรียกกลับ->ข้อผิดพลาด(ฟังก์ชั่น ($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 : เครื่องมือค้นหาของ Google
jae-jae/QueryList-Rule-Baidu: เครื่องมือค้นหา Baidu