PHP爬蟲框架Querylist介紹
介紹一個(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
