在ThinkPHP6中使用QueryList

隨著互聯網技術的不斷發展,數據爬蟲已經成為了人們獲取信息的重要方式之一。在php的框架中,thinkphp6不僅提供了強大的數據操作功能,還為我們提供了一種名為querylist的數據抓取庫來幫助我們更方便地獲取數據。

QueryList是一個基于流式鏈式操作的PHP數據采集與處理類庫,可以從html、xml、json、TXT等各種類型的文本中提取數據。本文將主要介紹在thinkphp6中如何使用QueryList來實現數據的抓取和處理。

1. 安裝QueryList

首先,我們需要在我們的ThinkPHP6應用中安裝QueryList??梢酝ㄟ^以下命令來使用composer進行安裝:

composer require jaeger/querylist

安裝完成后,我們需要在應用的config目錄下創建一個querylist.php配置文件,內容如下:

<?php return [     'default' => [         'type' =&gt; 'php',         'host' =&gt; '',         'login' =&gt; '',         'password' =&gt; '',         'database' =&gt; '',         'prefix' =&gt; '',         'charset' =&gt; 'utf8',         'deploy' =&gt; 0,         'rw_separate' =&gt; false,         'master_num' =&gt; 1,         'slave_no' =&gt; '',         'fields_fix'=&gt;"fl_",         'debug' =&gt; true,         'logfile' =&gt; 'QueryList.log',     ], ];

這個配置文件是QueryList的默認配置,配置文件中的各個參數的含義和用法可以在QueryList的官方文檔中查看。

立即學習PHP免費學習筆記(深入)”;

2. 使用QueryList進行數據抓取

QueryList提供了一系列的鏈式操作方法來幫助我們獲取和處理數據,這些方法包含了查找、篩選、提取和轉換等一系列常見的數據操作。

以下是一個簡單的例子,我們將使用QueryList來抓取百度首頁的數據,并輸出標題和鏈接。

use QLQueryList;  $html = file_get_contents('https://www.baidu.com'); $rules = [     'title' =&gt; ['title', 'text'],     'link' =&gt; ['a', 'href'] ]; $data = QueryList::html($html)-&gt;rules($rules)-&gt;query()-&gt;getData(); print_r($data-&gt;all());

以上代碼片段中,我們首先使用PHP自帶的file_get_contents函數獲取了百度首頁的源代碼,然后定義了一個規則數組$rules,表示我們需要抓取的數據的類型和位置。在這個例子中,我們需要提取出網頁中所有的標題和鏈接。

在定義好規則之后,我們將HTML文本轉化成查詢對象,并將規則應用到查詢對象中,最后通過getData方法獲取到數據。使用print_r方法來輸出獲取到的所有數據,我們可以看到輸出的結果如下:

Array (     [0] =&gt; Array         (             [title] =&gt; 百度一下,你就知道             [link] =&gt; https://www.baidu.com/s?tn=site888_2_pg&amp;ch=12&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=15&amp;rsv_sug1=12&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=0&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=3114         )      [1] =&gt; Array         (             [title] =&gt; 新聞             [link] =&gt; https://www.baidu.com/s?cl=2&amp;tn=site888_2_pg&amp;ch=11&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=19&amp;rsv_sug1=17&amp;rsv_sug7=101&amp;sug=0&amp;prefixsug=news&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=4085         )      [2] =&gt; Array         (             [title] =&gt; hao123_上網從這里開始             [link] =&gt; https://www.baidu.com/s?cl=3&amp;tn=site888_2_pg&amp;ch=6&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=25&amp;rsv_sug1=23&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=hao123&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=5329         )      [3] =&gt; Array         (             [title] =&gt; 地圖             [link] =&gt; https://www.baidu.com/s?cl=4&amp;tn=site888_2_pg&amp;ch=1&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=31&amp;rsv_sug1=28&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=map&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=6166         )      [4] =&gt; Array         (             [title] =&gt; 視頻             [link] =&gt; https://www.baidu.com/s?cl=5&amp;tn=site888_2_pg&amp;ch=8&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=37&amp;rsv_sug1=34&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=video&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=7407         )      [5] =&gt; Array         (             [title] =&gt; 貼吧             [link] =&gt; https://www.baidu.com/s?cl=6&amp;tn=site888_2_pg&amp;ch=7&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=43&amp;rsv_sug1=39&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=tf&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=8649         )      [6] =&gt; Array         (             [title] =&gt; 學術             [link] =&gt; https://www.baidu.com/s?cl=7&amp;tn=site888_2_pg&amp;ch=9&amp;usm=0&amp;rsv_pq=c41e6776001f4675&amp;rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&amp;rqlang=cn&amp;rsv_dl=0&amp;rs=1&amp;inputT=2696&amp;rsv_sug3=49&amp;rsv_sug1=45&amp;rsv_sug7=100&amp;sug=0&amp;prefixsug=xueshu&amp;rsp=0&amp;inputT=2890&amp;rsv_sug4=9890         )      [7] =&gt; Array         (             [title] =&gt; 登錄             [link] =&gt; https://passport.baidu.com/v3/?reg&amp;redirect=http%3A%2F%2Fwww.baidu.com%2F&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2F         )  )

可以看到,我們已經成功地提取出了頁面中的標題和鏈接。通過簡單的鏈式操作,我們就可以完成數據的抓取和處理。

3. 使用QueryList進行數據存儲

在進行數據抓取和處理之后,我們有可能需要將獲取的數據存儲到數據庫中,以便后續的使用。QueryList提供了一個方便的方法來將數據存儲到數據庫中,以下是一個簡單的例子,我們將數據存儲到mysql數據庫中。

use QLQueryList;  $rules = [     'title' =&gt; ['title', 'text'],     'link' =&gt; ['a', 'href'] ]; $data = QueryList::get('https://www.baidu.com')-&gt;rules($rules)-&gt;query()-&gt;getData(); $db = new     hinkDb; $affected = $db::table('test')-&gt;insertAll($data-&gt;all()); echo '添加成功' . $affected . '條數據';

首先,我們定義了之前的規則數組和獲取數據的方法。在這個例子中,我們使用了QueryList的get方法來獲取頁面的數據。獲取數據后,我們首先實例化了一個數據庫操作類,然后使用insertAll方法將數據批量插入到數據庫中。

執行上述代碼之后,我們可以在MySQL數據庫中看到新插入的數據。

綜上所述,在ThinkPHP6中使用QueryList能夠非常方便地完成數據的抓取和處理,并且也能夠很方便地將抓取到的數據存儲到數據庫中。QueryList的鏈式操作方式也非常適合數據的處理和轉換。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享