인터넷 기술의 지속적인 발전으로 데이터 크롤러는 사람들이 정보를 얻는 중요한 방법 중 하나가 되었습니다. PHP 프레임워크에서 ThinkPHP6은 강력한 데이터 조작 기능을 제공할 뿐만 아니라 QueryList라는 데이터 수집 라이브러리를 제공하여 보다 편리하게 데이터를 얻을 수 있도록 도와줍니다.
QueryList는 스트리밍 체인 작업을 기반으로 하는 PHP 데이터 수집 및 처리 라이브러리로, HTML, XML, JSON, TXT 등 다양한 유형의 텍스트에서 데이터를 추출할 수 있습니다. 이 글에서는 주로 ThinkPHP6에서 QueryList를 사용하여 데이터를 캡처하고 처리하는 방법을 소개합니다.
먼저 ThinkPHP6 애플리케이션에 QueryList를 설치해야 합니다. Composer를 사용하여 다음 명령을 통해 설치할 수 있습니다.
composer require jaeger/querylist
설치가 완료된 후 애플리케이션의 config 디렉터리에 다음 내용으로 querylist.php 구성 파일을 생성해야 합니다.
<?php return [ 'default' => [ 'type' => 'php', 'host' => '', 'login' => '', 'password' => '', 'database' => '', 'prefix' => '', 'charset' => 'utf8', 'deploy' => 0, 'rw_separate' => false, 'master_num' => 1, 'slave_no' => '', 'fields_fix'=>"fl_", 'debug' => true, 'logfile' => 'QueryList.log', ], ];
이 구성 파일은 다음과 같습니다. QueryList의 기본 구성, 구성 파일 각 매개변수의 의미와 사용법은 QueryList 공식 문서에서 확인할 수 있습니다.
QueryList는 데이터를 획득하고 처리하는 데 도움이 되는 일련의 체인 작업 방법을 제공합니다. 이러한 방법에는 검색, 필터링, 추출 및 변환과 같은 일련의 일반적인 데이터 작업이 포함됩니다.
다음은 간단한 예입니다. QueryList를 사용하여 Baidu 홈페이지의 데이터를 가져오고 제목과 링크를 출력하겠습니다.
use QLQueryList; $html = file_get_contents('https://www.baidu.com'); $rules = [ 'title' => ['title', 'text'], 'link' => ['a', 'href'] ]; $data = QueryList::html($html)->rules($rules)->query()->getData(); print_r($data->all());
위 코드 조각에서는 먼저 PHP와 함께 제공되는 file_get_contents 함수를 사용하여 Baidu 홈페이지의 소스 코드를 가져온 다음 캡처해야 하는 데이터의 유형과 위치를 나타내는 규칙 배열 $rules를 정의합니다. 이 예에서는 웹 페이지의 모든 제목과 링크를 추출해야 합니다.
규칙을 정의한 후 HTML 텍스트를 쿼리 개체로 변환하고 규칙을 쿼리 개체에 적용한 다음 마지막으로 getData 메서드를 통해 데이터를 가져옵니다. print_r 메소드를 사용하여 얻은 모든 데이터를 출력하면 다음과 같은 출력 결과를 볼 수 있습니다.
Array ( [0] => Array ( [title] => 百度一下,你就知道 [link] => https://www.baidu.com/s?tn=site888_2_pg&ch=12&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=15&rsv_sug1=12&rsv_sug7=100&sug=0&prefixsug=0&rsp=0&inputT=2890&rsv_sug4=3114 ) [1] => Array ( [title] => 新闻 [link] => https://www.baidu.com/s?cl=2&tn=site888_2_pg&ch=11&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=19&rsv_sug1=17&rsv_sug7=101&sug=0&prefixsug=news&rsp=0&inputT=2890&rsv_sug4=4085 ) [2] => Array ( [title] => hao123_上网从这里开始 [link] => https://www.baidu.com/s?cl=3&tn=site888_2_pg&ch=6&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=25&rsv_sug1=23&rsv_sug7=100&sug=0&prefixsug=hao123&rsp=0&inputT=2890&rsv_sug4=5329 ) [3] => Array ( [title] => 地图 [link] => https://www.baidu.com/s?cl=4&tn=site888_2_pg&ch=1&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=31&rsv_sug1=28&rsv_sug7=100&sug=0&prefixsug=map&rsp=0&inputT=2890&rsv_sug4=6166 ) [4] => Array ( [title] => 视频 [link] => https://www.baidu.com/s?cl=5&tn=site888_2_pg&ch=8&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=37&rsv_sug1=34&rsv_sug7=100&sug=0&prefixsug=video&rsp=0&inputT=2890&rsv_sug4=7407 ) [5] => Array ( [title] => 贴吧 [link] => https://www.baidu.com/s?cl=6&tn=site888_2_pg&ch=7&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=43&rsv_sug1=39&rsv_sug7=100&sug=0&prefixsug=tf&rsp=0&inputT=2890&rsv_sug4=8649 ) [6] => Array ( [title] => 学术 [link] => https://www.baidu.com/s?cl=7&tn=site888_2_pg&ch=9&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=49&rsv_sug1=45&rsv_sug7=100&sug=0&prefixsug=xueshu&rsp=0&inputT=2890&rsv_sug4=9890 ) [7] => Array ( [title] => 登录 [link] => https://passport.baidu.com/v3/?reg&redirect=http%3A%2F%2Fwww.baidu.com%2F&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F ) )
보시다시피 페이지의 제목과 링크가 성공적으로 추출되었습니다. 간단한 체인 운영을 통해 데이터 캡처 및 처리를 완료할 수 있습니다.
데이터 캡처 및 처리 후에는 후속 사용을 위해 획득한 데이터를 데이터베이스에 저장해야 할 수도 있습니다. QueryList는 데이터를 데이터베이스에 저장하는 편리한 방법을 제공합니다. 다음은 MySQL 데이터베이스에 데이터를 저장하는 간단한 예입니다.
use QLQueryList; $rules = [ 'title' => ['title', 'text'], 'link' => ['a', 'href'] ]; $data = QueryList::get('https://www.baidu.com')->rules($rules)->query()->getData(); $db = new hinkDb; $affected = $db::table('test')->insertAll($data->all()); echo '添加成功' . $affected . '条数据';
먼저 이전 규칙 배열과 데이터를 가져오는 방법을 정의합니다. 이 예에서는 QueryList의 get 메소드를 사용하여 페이지의 데이터를 가져옵니다. 데이터를 얻은 후 먼저 데이터베이스 작업 클래스를 인스턴스화한 다음 insertAll 메서드를 사용하여 데이터를 데이터베이스에 일괄 삽입합니다.
위 코드를 실행하면 MySQL 데이터베이스에 새로 삽입된 데이터를 확인할 수 있습니다.
요약하자면, ThinkPHP6에서 QueryList를 사용하면 데이터 캡처 및 처리를 쉽게 완료할 수 있으며, 캡처된 데이터를 데이터베이스에 쉽게 저장할 수도 있습니다. QueryList의 체인 연산 방식은 데이터 처리 및 변환에도 매우 적합합니다.
위 내용은 ThinkPHP6에서 QueryList 사용하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!