Thinkphp5與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 QL\QueryList; 接下來就在控制器里編寫代碼了,以下是一個實例

 1 //需要采集的目標頁面
 2 $page = 'http://cms.querylist.cc/news/566.html';
 3 //采集規則
 4 $reg = array(
 5    //采集文章標題
 6    'title' => array('h1','text'),
 7    //采集文章發布日期,這里用到了QueryList的過濾功能,過濾掉span標簽和a標簽
 8    'date' => array('.pt_info','text','-span -a',function($content){
 9        //用回調函數進一步過濾出日期
10        $arr = explode(' ',$content);
11        return $arr[0];
12    }),
13    //采集文章正文內容,利用過濾功能去掉文章中的超鏈接,但保留超鏈接的文字,並去掉版權、JS代碼等無用信息
14    'content' => array('.post_content','html','a -.content_copyright -script',function($content){
15        //利用回調函數下載文章中的圖片並替換圖片路徑為本地路徑
16        //使用本例請確保當前目錄下有image文件夾,並有寫入權限
17        //由於QueryList是基於phpQuery的,所以可以隨時隨地使用phpQuery,當然在這里也可以使用正則或者其它方式達到同樣的目的
18 
19        $doc=\phpQuery::newDocumentHTML($content);
20        $imgs = pq($doc)->find('img');
21        foreach ($imgs as $img) {
22            $src = 'http://cms.querylist.cc'.pq($img)->attr('src');
23            $localSrc = md5($src).'.jpg';
24            $stream = file_get_contents($src);
25            file_put_contents($localSrc,$stream);
26            pq($img)->attr('src',$localSrc);
27        }
28        return $doc->htmlOuter();
29    })
30 );
31 $rang = '.content';
32 $ql = QueryList::Query($page,$reg,$rang);
33 $data = $ql->getData();
34 //打印結果
35 print_r($data);

 

 

注意:在使用phpQuery類時需要在前面加上\,因為phpQuery.php中沒有使用命名空間,因為使用命名空間后,QueryList.php無法使用phpQuery類。

 

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM