PHP爬虫框架Querylist介绍

介绍一个爬虫框架Querylist的使用。
官网:http://www.querylist.cc/

QueryList 是什么

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);

更多使用方法请查看文档。。。

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论