thinkphp5使用QueryList實現採集功能

  • QueryList是基於phpQuery的
  • 1.下載`QueryList.php`和`phpQuery.php`這兩個文件。
  • 2.在`extend`下新建`QL`目錄。
  • 3.將下載好的`QueryList.php`和`phpQuery.php`這兩個文件複製到`extend/QL`目錄。
  • 4.在QueryList.php頭部加入
五、在須要使用的控制器中加入
 
use QL\QueryList;
 
下面給出一個示例代碼:
 //須要採集的目標頁面
       $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/
相關文章
相關標籤/搜索