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. 웹 크롤러
6......
PHP >= 7.0
PHP가 여전히 PHP5에서 멈춰 있거나 Composer 사용 방법을 모르는 경우 QueryList3을 사용하도록 선택할 수 있습니다. QueryList3은 php5.3 및 수동 설치를 지원합니다.
Composer를 통해 설치:
작곡가는 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() // 검색 결과 제목 가져오기 list $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')// 수집 규칙 설정->rules([ 'title'=>array('h3','text' ), 'link'=>array('h3>a','href')])->query()->getData();print_r($data->all());
수집 결과:
Array( [0] => Array ( [제목] => QueryList | phpQuery 기반의 매우 강력한 PHP 수집 도구 [링크] => http://www.baidu.com/link?url=GU_YbDT2IHk4ns1tjG2I8_vjmH0SCJEAPuuZN ) [1] = > 배열( [제목] => PHP는 QueryList를 사용하여 웹 페이지 콘텐츠를 크롤링합니다. - wb145230 - Blog Park [링크] => http://www.baidu.com/link?url=zn0DXBnrvIF2ibRVW34KcRVFG1_bCdZvqvwIhUqiXaS ) [2] => 배열( [ title ] => 소개 - QueryList 안내 문서 [link] => 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')-> 찾기('a')->텍스트();
HTTP 네트워크 작업(GuzzleHttp)
쿠키를 사용하여 Sina Weibo에 로그인하세요.
//Sina Weibo에서 액세스하기 위해 로그인이 필요한 페이지를 수집합니다. $ql = QueryList::get('http://weibo.com','param1=testvalue & params2=somevalue',[ 'headers' => [ //채우기 브라우저에서 얻은 쿠키 '쿠키' => 'SINAGLOBAL=546064; 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' => ' test/1.0', '수락' => '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 사용자 이름 또는 이메일');$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 "Current url:{$r['info ' ]['url']} rn"; $data = $ql->find('h3 a')->texts(); print_r($data->all());}) // 각각 작업 실패 콜백->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: 컬 멀티스레드 수집
jae-jae/QueryList-AbsoluteUrl : URL 상대경로를 절대경로로 변환
jae-jae/QueryList-Rule-Google : 구글 검색 엔진
jae-jae/QueryList-Rule-Baidu : 바이두 검색엔진