QueryList是一套用於內容採集的PHP工具,它使用更加現代化的開發思想,語法簡潔、優雅,可擴展性強。相比傳統的使用晦澀的正則表達式來作採集,QueryList使用了更增強大而優雅的CSS選擇器來作採集,大大下降了PHP作採集的門檻,同時也讓採集代碼易讀易維護,讓你今後告別晦澀難懂且不易維護的正則表達式😀。php
前提html
項目主要用thinkphp5框架,主要會用到`QueryList.php`和`phpQuery.php`這兩個文件。咱們能夠切換到項目目錄,extend裏新建QL,而後在QL目錄執行composer命令安裝QueryList:正則表達式
composer require jaeger/querylist
而後在須要使用的控制器中加入 use QL\QueryList; 接下來就在控制器裏編寫代碼了,如下是一個實例thinkphp
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類。
以上是一個簡單的例子,已經實現了採集網頁數據,更多詳細語法與實例能夠移步到官網文檔,細細查看composer
QueryList參考文檔:https://doc.querylist.cc/