溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Thinkphp5與QueryList如何實(shí)現(xiàn)采集頁面功能

發(fā)布時(shí)間:2021-01-16 10:43:09 來源:億速云 閱讀:192 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)Thinkphp5與QueryList如何實(shí)現(xiàn)采集頁面功能的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

QueryList 是什么?

QueryList是一套用于內(nèi)容采集的PHP工具,它使用更加現(xiàn)代化的開發(fā)思想,語法簡潔、優(yōu)雅,可擴(kuò)展性強(qiáng)。相比傳統(tǒng)的使用晦澀的正則表達(dá)式來做采集,QueryList使用了更加強(qiáng)大而優(yōu)雅的CSS選擇器來做采集,大大降低了PHP做采集的門檻,同時(shí)也讓采集代碼易讀易維護(hù),讓你從此告別晦澀難懂且不易維護(hù)的正則表達(dá)式。

QueryList 提供的一整套內(nèi)容采集解決方案

● DOM內(nèi)容選擇:CSS選擇器

● HTTP客戶端:GuzzleHTTP

● 內(nèi)容過濾:CSS選擇器

● 解決亂碼:內(nèi)置多套亂碼解決方案

● 額外功能:豐富的擴(kuò)展插件

前提

項(xiàng)目主要用thinkphp5框架,主要會(huì)用到`QueryList.php`和`phpQuery.php`這兩個(gè)文件。我們可以切換到項(xiàng)目目錄,extend里新建QL,然后在QL目錄執(zhí)行composer命令安裝QueryList:

composer require jaeger/querylist

然后在需要使用的控制器中加入 use QL\QueryList; 接下來就在控制器里編寫代碼了,以下是一個(gè)實(shí)例

//需要采集的目標(biāo)頁面
$page = 'http://cms.querylist.cc/news/566.html';
//采集規(guī)則
$reg = array(
   //采集文章標(biāo)題
   'title' => array('h2','text'),
   //采集文章發(fā)布日期,這里用到了QueryList的過濾功能,過濾掉span標(biāo)簽和a標(biāo)簽
   'date' => array('.pt_info','text','-span -a',function($content){
       //用回調(diào)函數(shù)進(jìn)一步過濾出日期
       $arr = explode(' ',$content);
       return $arr[0];
   }),
   //采集文章正文內(nèi)容,利用過濾功能去掉文章中的超鏈接,但保留超鏈接的文字,并去掉版權(quán)、JS代碼等無用信息
   'content' => array('.post_content','html','a -.content_copyright -script',function($content){
       //利用回調(diào)函數(shù)下載文章中的圖片并替換圖片路徑為本地路徑
       //使用本例請(qǐng)確保當(dāng)前目錄下有image文件夾,并有寫入權(quán)限
       //由于QueryList是基于phpQuery的,所以可以隨時(shí)隨地使用phpQuery,當(dāng)然在這里也可以使用正則或者其它方式達(dá)到同樣的目的

       $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();
//打印結(jié)果
print_r($data);

注意:

在使用phpQuery類時(shí)需要在前面加上\,因?yàn)閜hpQuery.php中沒有使用命名空間,因?yàn)槭褂妹臻g后,QueryList.php無法使用phpQuery類。

感謝各位的閱讀!關(guān)于“Thinkphp5與QueryList如何實(shí)現(xiàn)采集頁面功能”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI