>PHP 프레임워크 >ThinkPHP >Thinkphp5 및 QueryList는 페이지 수집 기능(크롤러)을 구현합니다.

Thinkphp5 및 QueryList는 페이지 수집 기능(크롤러)을 구현합니다.

藏色散人
藏色散人앞으로
2020-01-28 13:57:273922검색

Thinkphp5 및 QueryList는 페이지 수집 기능(크롤러)을 구현합니다.

QueryList는 무엇인가요?

QueryList는 보다 현대적인 개발 아이디어를 사용하고 간단하고 우아한 구문과 강력한 확장성을 제공합니다. 수집을 위해 모호한 정규 표현식을 사용하는 기존 방식과 비교하여 QueryList는 수집을 위해 더욱 강력하고 우아한 CSS 선택기를 사용합니다. 이는 PHP 수집의 임계값을 크게 낮추고 수집 코드를 쉽게 읽고 유지 관리할 수 있도록 해줍니다. 모호하고 유지 관리하기 어려운 정규식을 사용합니다.

QueryList는 완전한 콘텐츠 수집 솔루션 세트를 제공합니다

● DOM 콘텐츠 선택: CSS 선택기

● HTTP 클라이언트: GuzzleHTTP

● 콘텐츠 필터링: CSS 선택기

● 잘못된 문자 해결: 내장 다중 잘못된 코드 솔루션 세트

● 추가 기능: 풍부한 확장 플러그인

전제 조건

프로젝트는 주로 thinkphp5 프레임워크를 사용하며 `QueryList.php` 및 `phpQuery.php` 두 파일을 주로 사용합니다. . 프로젝트 디렉터리로 전환하고, 확장에서 새 QL을 생성한 다음 QL 디렉터리에서 작성기 명령을 실행하여 QueryList를 설치할 수 있습니다.

composer require jaeger/querylist

그런 다음 사용해야 하는 컨트롤러에 use QLQueryList를 추가하고, 코드를 작성합니다. 컨트롤러에서 다음은 예입니다.

//需要采集的目标页面
$page = 'http://cms.querylist.cc/news/566.html';
//采集规则
$reg = array(
   //采集文章标题
   'title' => array('h1','text'),
   //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签
   'date' => array('.pt_info','text','-span -a',function($content){
       //用回调函数进一步过滤出日期
       $arr = explode(' ',$content);
       return $arr[0];
   }),
   //采集文章正文内容,利用过滤功能去掉文章中的超链接,但保留超链接的文字,并去掉版权、JS代码等无用信息
   'content' => array('.post_content','html','a -.content_copyright -script',function($content){
       //利用回调函数下载文章中的图片并替换图片路径为本地路径
       //使用本例请确保当前目录下有image文件夹,并有写入权限
       //由于QueryList是基于phpQuery的,所以可以随时随地使用phpQuery,当然在这里也可以使用正则或者其它方式达到同样的目的

       $doc=\phpQuery::newDocumentHTML($content);
       $imgs = pq($doc)->find('img');
       foreach ($imgs as $img) {
           $src = 'http://cms.querylist.cc'.pq($img)->attr('src');
           $localSrc = md5($src).'.jpg';
           $stream = file_get_contents($src);
           file_put_contents($localSrc,$stream);
           pq($img)->attr('src',$localSrc);
       }
       return $doc->htmlOuter();
   })
);
$rang = '.content';
$ql = QueryList::Query($page,$reg,$rang);
$data = $ql->getData();
//打印结果
print_r($data);

참고: phpQuery.php에서는 네임스페이스를 사용하지 않기 때문에 phpQuery 클래스를 사용할 때 네임스페이스를 사용한 후에

를 앞에 추가해야 합니다. , QueryList.php는 phpQuery 클래스를 사용할 수 없습니다.

더 많은 관련 ThinkPHP 지식을 보려면 ThinkPHP 튜토리얼을 방문하세요!

위 내용은 Thinkphp5 및 QueryList는 페이지 수집 기능(크롤러)을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제