<big draggable='5979n3h'><details dir='y02perh'></details></big>
  • <de dir='mbmhvmv'></de>
  • <td draggable='vnogeq2n'></td>

        1. <big dir='sflkcb'></big>

          文章熱詞:Thinkphp5,采集

          日期:2019-05-11 09:00 by 楊國偉 1192 0 收藏
          我要分享

          摘要:項目主要用thinkphp5框架,主要會用到`QueryList.php`和`phpQuery.php`這兩個文件。我們可以切換到項目目錄,extend裏新建QL,然後在QL目錄執行composer命令安裝QueryList

          QueryList 是什麽

          QueryList是一套用于内容采集的PHP工具,它使用更加現代化的開發思想,語法簡潔、優雅,可擴展性強。相比傳統的使用晦澀的正則表達式來做采集,QueryList使用了更加強大而優雅的CSS選擇器來做采集,大大降低了PHP做采集的門檻,同時也讓采集代碼易讀易維護,讓你從此告别晦澀難懂且不易維護的正則表達式

          QueryList 提供的一整套内容采集解決方案

          DOM内容選擇:CSS選擇器

          HTTP客戶端:GuzzleHTTP

          内容過濾:CSS選擇器

          解決亂碼:内置多套亂碼解決方案

          額外功能:豐富的擴展插件

          前提

          項目主要用thinkphp5框架,主要會用到`QueryList.php`和`phpQuery.php`這兩個文件。我們可以切換到項目目錄,extend裏新建QL,然後在QL目錄執行composer命令安裝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類時需要在前面加上,因爲phpQuery.php中沒有使用命名空間,因爲使用命名空間後,QueryList.php無法使用phpQuery類。

          以上是一個簡單的例子,已經實現了采集網頁數據,更多詳細語法與實例可以移步到官網文檔,細細查看

          QueryList參考文檔:https://doc.querylist.cc/

          上一篇:人生若隻如初見

          下一篇:來自一位老師的呐喊:請允許我用五分鍾,做一次教育


          評論