PHP爬虫框架Querylist介绍
共 2343字,需浏览 5分钟
·
2022-08-29 11:53
介绍一个爬虫框架Querylist的使用。
官网:http://www.querylist.cc/
ueryList 是什么
QueryList是一套用于内容采集的PHP工具,它使用更加现代化的开发思想,语法简洁、优雅,可扩展性强。相比传统的使用晦涩的正则表达式来做采集,QueryList使用了更加强大而优雅的CSS选择器来做采集,大大降低了PHP做采集的门槛,同时也让采集代码易读易维护,让你从此告别晦涩难懂且不易维护的正则表达式。
QueryList 提供的一整套内容采集解决方案
DOM内容选择:CSS选择器
HTTP客户端:GuzzleHTTP
内容过滤:CSS选择器
解决乱码:内置多套乱码解决方案
额外功能:丰富的扩展插件
安装
QueryList目前有2个支持的版本V3和V4,安装之前你需要根据实际环境来选择,它们的区别如下:
V3:PHP版本要求PHP5.3以上;
V4:PHP版本要求PHP7.0以上;
这里我们使用composer安装最新版的使用:
composer require jaeger/querylist
如果composer长时间未响应,建议更换国内镜像
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')
// 设置采集规则
->rules([
'title'=>array('h3','text'),
'link'=>array('h3>a','href')
])
->queryData();
print_r($data);
Querylist同时提供了许多数据处理的方法:
简化数据
如果我们想要的结果是一位数组,而非二位数组,那该怎么做呢?
可以使用flatten()方法将多维集合转为一维的,对上面的采集结果data进行处理:
$rt = $data->flatten()->all();
print_r($rt);
截取数据
如果我们只想要前2条数据,其它数据都是多余的,那该怎么做呢?
take() 方法返回给定数量项目的新集合,对最初的采集结果data进行处理:
$rt = $data->take(2)->all();
print_r($rt);
翻转数据顺序
某些情况下我们需要翻转数据顺序,比如:采集论坛的帖子列表,帖子默认是按照发布日期由新到旧排序的,但我们把这些数据存入数据库的时候,想要按照发布日期由旧到新存入。
reverse() 方法用来倒转集合中项目的顺序:
$rt = $data->reverse()->all();
print_r($rt);
过滤数据
filter()方法用于按条件过滤数据,只保留满足条件的数据。
下面例子过滤掉图片路径为/path/to/2.jpg的值。
采集代码:
$rt = $data->filter(function($item){
return $item['image'] != '/path/to/2.jpg';
})->all();
print_r($rt);
遍历数据,依次处理每一项数据
map() 方法遍历集合并将每一个值传入给定的回调。该回调可以任意修改项目并返回,从而形成新的被修改过项目的集合。下面遍历data并补全图片链接地址:
$rt = $data->map(function($item){
$item['image'] = 'http://xxx.com'.$item['image'];
return $item;
})->all();
print_r($rt);
连贯操作
Collection对象的所有方法都是可以连贯操作的,比如下面操作,先翻转数数据顺序,然后补全图片链接,最后截取前2条数据:
$rt = $data->reverse()->map(function($item){
$item['image'] = 'http://xxx.com'.$item['image'];
return $item;
})->take(2)->all();
print_r($rt);
更多使用方法请查看文档。。。
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net