隨著網路科技的不斷發展,資料爬蟲已經成為了人們獲取資訊的重要方式之一。在PHP的框架中,ThinkPHP6不僅提供了強大的資料操作功能,還為我們提供了一個名為QueryList的資料抓取庫來幫助我們更方便地取得資料。
QueryList是一個基於串流鍊式運算的PHP資料擷取與處理類別庫,可以從HTML、XML、JSON、TXT等各種類型的文字中擷取資料。本文將主要介紹在ThinkPHP6中如何使用QueryList來實現資料的抓取與處理。
首先,我們需要在我們的ThinkPHP6應用程式中安裝QueryList。可以透過以下命令來使用Composer進行安裝:
composer require jaeger/querylist
安裝完成後,我們需要在應用程式的config目錄下建立一個querylist.php設定文件,內容如下:
<?php return [ 'default' => [ 'type' => 'php', 'host' => '', 'login' => '', 'password' => '', 'database' => '', 'prefix' => '', 'charset' => 'utf8', 'deploy' => 0, 'rw_separate' => false, 'master_num' => 1, 'slave_no' => '', 'fields_fix'=>"fl_", 'debug' => true, 'logfile' => 'QueryList.log', ], ];
這個設定文件是QueryList的預設配置,設定檔中的各個參數的意義和用法可以在QueryList的官方文件中查看。
QueryList提供了一系列的鍊式操作方法來幫助我們獲取和處理數據,這些方法包含了查找、篩選、提取和轉換等一系列常見的資料操作。
以下是一個簡單的例子,我們將使用QueryList來抓取百度首頁的數據,並輸出標題和連結。
use QLQueryList; $html = file_get_contents('https://www.baidu.com'); $rules = [ 'title' => ['title', 'text'], 'link' => ['a', 'href'] ]; $data = QueryList::html($html)->rules($rules)->query()->getData(); print_r($data->all());
在以上程式碼片段中,我們首先使用PHP自帶的file_get_contents函數取得了百度首頁的原始程式碼,然後定義了一個規則陣列$rules,表示我們需要抓取的資料的類型和位置。在這個例子中,我們需要提取網頁中所有的標題和連結。
在定義好規則之後,我們將HTML文字轉換成查詢對象,並將規則應用到查詢對像中,最後透過getData方法取得到資料。使用print_r方法來輸出獲取到的所有數據,我們可以看到輸出的結果如下:
Array ( [0] => Array ( [title] => 百度一下,你就知道 [link] => https://www.baidu.com/s?tn=site888_2_pg&ch=12&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=15&rsv_sug1=12&rsv_sug7=100&sug=0&prefixsug=0&rsp=0&inputT=2890&rsv_sug4=3114 ) [1] => Array ( [title] => 新闻 [link] => https://www.baidu.com/s?cl=2&tn=site888_2_pg&ch=11&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=19&rsv_sug1=17&rsv_sug7=101&sug=0&prefixsug=news&rsp=0&inputT=2890&rsv_sug4=4085 ) [2] => Array ( [title] => hao123_上网从这里开始 [link] => https://www.baidu.com/s?cl=3&tn=site888_2_pg&ch=6&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=25&rsv_sug1=23&rsv_sug7=100&sug=0&prefixsug=hao123&rsp=0&inputT=2890&rsv_sug4=5329 ) [3] => Array ( [title] => 地图 [link] => https://www.baidu.com/s?cl=4&tn=site888_2_pg&ch=1&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=31&rsv_sug1=28&rsv_sug7=100&sug=0&prefixsug=map&rsp=0&inputT=2890&rsv_sug4=6166 ) [4] => Array ( [title] => 视频 [link] => https://www.baidu.com/s?cl=5&tn=site888_2_pg&ch=8&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=37&rsv_sug1=34&rsv_sug7=100&sug=0&prefixsug=video&rsp=0&inputT=2890&rsv_sug4=7407 ) [5] => Array ( [title] => 贴吧 [link] => https://www.baidu.com/s?cl=6&tn=site888_2_pg&ch=7&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=43&rsv_sug1=39&rsv_sug7=100&sug=0&prefixsug=tf&rsp=0&inputT=2890&rsv_sug4=8649 ) [6] => Array ( [title] => 学术 [link] => https://www.baidu.com/s?cl=7&tn=site888_2_pg&ch=9&usm=0&rsv_pq=c41e6776001f4675&rsv_t=18fbRjBF2q5prQVFnv46BpnHtLGviB4KLud38LaBjYeT%2BRvj1zHqh7ksOBo&rqlang=cn&rsv_dl=0&rs=1&inputT=2696&rsv_sug3=49&rsv_sug1=45&rsv_sug7=100&sug=0&prefixsug=xueshu&rsp=0&inputT=2890&rsv_sug4=9890 ) [7] => Array ( [title] => 登录 [link] => https://passport.baidu.com/v3/?reg&redirect=http%3A%2F%2Fwww.baidu.com%2F&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F ) )
可以看到,我們已經成功地提取出了頁面中的標題和連結。透過簡單的鍊式操作,我們就可以完成資料的抓取和處理。
在進行資料抓取和處理之後,我們有可能需要將取得的資料儲存到資料庫中,以便後續的使用。 QueryList提供了一個方便的方法來將資料儲存到資料庫中,以下是一個簡單的例子,我們將資料儲存到MySQL資料庫中。
use QLQueryList; $rules = [ 'title' => ['title', 'text'], 'link' => ['a', 'href'] ]; $data = QueryList::get('https://www.baidu.com')->rules($rules)->query()->getData(); $db = new hinkDb; $affected = $db::table('test')->insertAll($data->all()); echo '添加成功' . $affected . '条数据';
首先,我們定義了先前的規則陣列和取得資料的方法。在這個範例中,我們使用了QueryList的get方法來取得頁面的資料。取得資料後,我們首先實例化了一個資料庫操作類,然後使用insertAll方法將資料批次插入資料庫。
執行上述程式碼之後,我們可以在MySQL資料庫中看到新插入的資料。
綜上所述,在ThinkPHP6中使用QueryList能夠非常方便地完成資料的抓取和處理,並且也能夠很方便地將抓取到的資料儲存到資料庫中。 QueryList的鍊式操作方式也非常適合資料的處理和轉換。
以上是在ThinkPHP6中使用QueryList的詳細內容。更多資訊請關注PHP中文網其他相關文章!