querylist 是什么?
QueryList是一套用于內容采集的PHP工具,它使用更加現代化的開發思想,語法簡潔、優雅,可擴展性強。相比傳統的使用晦澀的正則表達式來做采集,QueryList使用了更加強大而優雅的CSS選擇器來做采集,大大降低了PHP做采集的門檻,同時也讓采集代碼易讀易維護,讓你從此告別晦澀難懂且不易維護的正則表達式。
?
QueryList 提供的一整套內容采集解決方案
●?DOM內容選擇:CSS選擇器
立即學習“PHP免費學習筆記(深入)”;
●?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類。
更多相關ThinkPHP知識,請訪問ThinkPHP教程!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END