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