Querylist使用

QueryList

安装

composer require jaeger/querylist

OR
https://github.com/jae-jae/QueryList/tree/V3.2.1

使用

在框架中

use QL\QueryList;
QueryList::xxxx()->xxxx();

直接使用

用composer安装后引用自动加载文件

<?php
require 'vendor/autoload.php';
use QL\QueryList;

http://www.querylist.cc/querylist-test/
可以在该页面直接生成代码

具体使用

获取内容

$data = QueryList::get('http://jandan.net/')->find('#content .post .indexs h2 a')->attrs('href');
return $data->all();

解析
获取 http://jandan.net/ 页面
找到 #content .post .indexs h2 a 元素
获取 a元素的href标签的内容
print_r($data->all()); 输出采集结果

Array
(
    [0] => http://jandan.net/2020/03/05/eat-less.html
    [1] => http://jandan.net/2020/03/05/secret-long-life.html
)
find获取内容

具体 http://www.querylist.cc/docs/api/v4/Elements-introduce

[HTML属性] 快捷获取html属性

find('img')->src;
//获取img的src
find('a')->href;
//获取a的href

map() 元素遍历
attr() 获取html属性
html() 获取元素的html内容
text() 获取元素的text内容
attrs() 获取多个元素的html属性
htmls() 获取多个元素的html内容
texts() 获取多个元素的text内容
children() 获取孩子节点

多个规则

$url = 'http://jandan.net/2020/03/05/eat-less.html';
$rules = [
            'title' => ['#content .post h1','text',],
            'content' => ['#content .post p','text',],
        ];
$data = QueryList::get($url)->rules($rules)->query()->getData();
return $data->all();

rules() 输入规则

[
'规则名' => array('jQuery选择器','要采集的属性'[,"标签过滤列表"][,"回调函数"])
]

例如

'title' => ['#content .post','text','-div a',function(){}],

获取 #content .post h1 的文本 剔除 div标签 保留 a

采集的属性

三种类型
text:返回当前选中标签下面的纯文本
html:返回当前选中标签下面的html片段
HTML标签属性:如src、href、name、data-src等任意HTML标签属性名,支持通配符*匹配标签所有属性

过滤列表

带 - 的是剔除
不带的是保留

->query()->getData()

->query()执行rules 执行完之后才能用 ->getData()获取数据
可用 ->queryData() 代替 等同于 query()->getData()->all()

并发

use GuzzleHttp\Psr7\Response;

$urls = [
    "http://jandan.net/2020/03/10/coronavirus-diy.html",
    "http://jandan.net/2020/03/10/organoids-millionth-size.html",
    "http://jandan.net/2020/03/10/molecule-structure.html",
    "http://jandan.net/2020/03/10/city-cars.html",
    "http://jandan.net/2020/03/10/love-toyboy.html"
];

$rules = [
    'title' => ['#content .post h1','text'],
    'content' => ['#content .post p','text'],
];
QueryList::rules($rules)//设定规则
    ->multiGet($urls)//需要访问的URL数组 GET请求 POST为 multiPost()
    // 设置并发数
    ->concurrency(5)
    // 设置GuzzleHttp的一些其他选项
    ->withOptions([
        'timeout' => 60 //超时
        'http_errors' => false //当4xx或者5xx时不报错跳出
    ])
    // 设置HTTP Header
    ->withHeaders([])
    // HTTP success回调函数 闭包方法
    ->success(function (QueryList $ql, Response $response, $index){
        $data = $ql->queryData();
        print_r($data);
    })
    // HTTP error回调函数 闭包方法
    ->error(function (QueryList $ql, $reason, $index){
        // ...
    })
    ->send();

本文链接:

https://www.antixu.com/archives/406/
1 + 1 =
快来做第一个评论的人吧~