<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PHP爬蟲框架Querylist介紹

          共 2343字,需瀏覽 5分鐘

           ·

          2022-08-29 11:53

          介紹一個(gè)爬蟲框架Querylist的使用。
          官網(wǎng):http://www.querylist.cc/

          ueryList 是什么

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

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

          DOM內(nèi)容選擇:CSS選擇器
          HTTP客戶端:GuzzleHTTP
          內(nèi)容過濾:CSS選擇器
          解決亂碼:內(nèi)置多套亂碼解決方案
          額外功能:豐富的擴(kuò)展插件

          安裝

          QueryList目前有2個(gè)支持的版本V3和V4,安裝之前你需要根據(jù)實(shí)際環(huán)境來(lái)選擇,它們的區(qū)別如下:
          V3:PHP版本要求PHP5.3以上;
          V4:PHP版本要求PHP7.0以上;
          這里我們使用composer安裝最新版的使用:

          composer require jaeger/querylist

          如果composer長(zhǎng)時(shí)間未響應(yīng),建議更換國(guó)內(nèi)鏡像

          composer config -g repo.packagist composer https://packagist.laravel-china.org

          代碼示例:

          require_once('./vendor/autoload.php');
          use QL\QueryList;
          $data = QueryList::get('https://fengkui.net')
              // 設(shè)置采集規(guī)則
              ->rules([
                  'title'=>array('h3','text'),
                  'link'=>array('h3>a','href')
              ])
              ->queryData();
          print_r($data);

          Querylist同時(shí)提供了許多數(shù)據(jù)處理的方法:

          簡(jiǎn)化數(shù)據(jù)

          如果我們想要的結(jié)果是一位數(shù)組,而非二位數(shù)組,那該怎么做呢?
          可以使用flatten()方法將多維集合轉(zhuǎn)為一維的,對(duì)上面的采集結(jié)果data進(jìn)行處理:

          $rt = $data->flatten()->all();
          print_r($rt);

          截取數(shù)據(jù)

          如果我們只想要前2條數(shù)據(jù),其它數(shù)據(jù)都是多余的,那該怎么做呢?
          take() 方法返回給定數(shù)量項(xiàng)目的新集合,對(duì)最初的采集結(jié)果data進(jìn)行處理:

          $rt = $data->take(2)->all();
          print_r($rt);

          翻轉(zhuǎn)數(shù)據(jù)順序

          某些情況下我們需要翻轉(zhuǎn)數(shù)據(jù)順序,比如:采集論壇的帖子列表,帖子默認(rèn)是按照發(fā)布日期由新到舊排序的,但我們把這些數(shù)據(jù)存入數(shù)據(jù)庫(kù)的時(shí)候,想要按照發(fā)布日期由舊到新存入。
          reverse() 方法用來(lái)倒轉(zhuǎn)集合中項(xiàng)目的順序:

          $rt = $data->reverse()->all();
          print_r($rt);

          過濾數(shù)據(jù)

          filter()方法用于按條件過濾數(shù)據(jù),只保留滿足條件的數(shù)據(jù)。
          下面例子過濾掉圖片路徑為/path/to/2.jpg的值。
          采集代碼:

          $rt = $data->filter(function($item){
              return $item['image'] != '/path/to/2.jpg';
          })->all();
          print_r($rt);

          遍歷數(shù)據(jù),依次處理每一項(xiàng)數(shù)據(jù)

          map() 方法遍歷集合并將每一個(gè)值傳入給定的回調(diào)。該回調(diào)可以任意修改項(xiàng)目并返回,從而形成新的被修改過項(xiàng)目的集合。下面遍歷data并補(bǔ)全圖片鏈接地址:

          $rt = $data->map(function($item){
              $item['image'] = 'http://xxx.com'.$item['image'];
              return $item;
          })->all();
          print_r($rt);

          連貫操作

          Collection對(duì)象的所有方法都是可以連貫操作的,比如下面操作,先翻轉(zhuǎn)數(shù)數(shù)據(jù)順序,然后補(bǔ)全圖片鏈接,最后截取前2條數(shù)據(jù):

          $rt = $data->reverse()->map(function($item){
              $item['image'] = 'http://xxx.com'.$item['image'];
              return $item;
          })->take(2)->all();
          print_r($rt);

          更多使用方法請(qǐng)查看文檔。。。

          本文為馮奎原創(chuàng)文章,轉(zhuǎn)載無(wú)需和我聯(lián)系,但請(qǐng)注明來(lái)自馮奎博客fengkui.net

          瀏覽 112
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操天天摸天天爱 | 欧美肏屄视频 | 91性爱视频 | www国产亚洲精品久久网站 | 动漫操逼免费 |