为'艺术'而生的'小妾'工具--QueryList
23

烨竹

首先解释标题:
艺术==laravel(这里不能用"三"等于,不然有人说我语法错误)
小妾==中国有句老话:妻不如妾,妾不如偷,偷不如偷不到;妻就是原配(自己写的源代码),妾就是QueryList,偷当然就是小偷程序,偷不到就是你花钱别人也不会把小偷程序的源码给你;再者说了,'偷'在中国古代艺术的叫法是什么--“qie”;

**简介:
Querylist其实就是一款网页采集的第三方工具类;
特点:简单,强大,现代;(就本人而言主要是为了偷懒);
缺点:再怎么优秀也只是一款第三方工具,感觉人气不高(估计爬取网页都去用py了)。

总结
具体用法做个总结就是:确定你需要爬取得内容,配置爬取规则,执行爬取;
官方文档做个总结:安装,简单爬取,Dom爬取,插件相关,示例

这里引用官方文档对上面的总结进行说明:

//简单爬取
<?php
require 'QueryList/vendor/autoload.php';
use QL\QueryList;
$html = <<<STR
<div id="one">
    <div class="two">
        <a href="http://querylist.cc">QueryList官网</a>
        <img src="http://querylist.com/1.jpg" alt="这是图片">
        <img src="http://querylist.com/2.jpg" alt="这是图片2">
    </div>
    <span>其它的<b>一些</b>文本</span>
</div>        
STR;
$rules = array(
    //采集id为one这个元素里面的纯文本内容
    'text' => array('#one','text'),
    //采集class为two下面的超链接的链接
    'link' => array('.two>a','href'),
    //采集class为two下面的第二张图片的链接
    'img' => array('.two>img:eq(1)','src'),
    //采集span标签中的HTML内容
    'other' => array('span','html')
);
$data = QueryList::html($html)
        ->rules($rules)
        ->query()
        ->getData();
print_r($data->all());

对querylist简单理解

下载和引入querylist扩展

composer require jaeger/querylist
require 'vendor/autoload.php';
use QLQueryList;

获取采集目标(大多数情况为页面的html代码)

把html源码添加进querylist类中--html(\$html)
从querylist类中拉出html代码(这个函数只会拉去所有的html代码)
确定需要采集的类容--rules(array \$rules)
对采集的数据进行一致性处理--range(\$selector),便于数据的应用
根据需要移除头部处理--removeHead()
执行采集规则rules--query()并且可以修改采集到的数据,无限极分类
获取到采集数据--getData()
QueryList单一实例--getInstance()
多QueryList共存的场景-- new QueryList()
释放资源,销毁内存占用--destruct()

根据Dom获取采集目标->fimd()

有一点很遗憾:他的DOM(特殊API,也可以算是对象)只是做了简单介绍,如果文档能在这方面进行完善,估计这一款第三方扩展能更上一层楼;

\$ql = QueryList::get('http://www.baidu.com/s?wd=QueryList');
//获取所有h3标签下的a标签的文本
\$data = \$ql->find('h3>a')->texts();
print_r(\$data->all());
//获取页面中所有图片地址
\$data = \$ql->find('img')->attrs('src');
print_r($data->all());

强大的插件扩展:

url处理插件--get(\$url,\$args = null,\$otherArgs = [])
post表单提交--post(\$url,\$args = null,\$otherArgs = [])
编码转换--encoding(string \$outputEncoding,string \$inputEncoding = null)
转换URL相对路径到绝对路径--absoluteUrl(\$baseUrl): 转换页面所有Url为绝对路径,return QueryList
--absoluteUrlHelper(\$baseUrl,\$relativeUrl): 单链接转换帮助函数,return string
Curl多线程采集--CurlMulti 插件
JavaScript动态渲染的页面--PhantomJS插件
搜索引擎插件--百度谷歌

插件相关的API:

设置采集结果数据(此方法紧提供给插件使用)--setData(Collection \$data)
生成一个新的插件--bind(string \$name,Closure \$provide)
使用插件-- use(\$plugins,…\$opt)
插件全局配置--Config use(\$plugins,…\$opt)

本帖由系统于 2个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7
newbing

http://querylist.cc 首页加在是 bug 呢还是 feature

3个月前

@刘兵 其实我没弄懂你的意思 :joy:

3个月前
newbing

@右耳聆听心的声音 你的文档首页加载效果,从左上角逐渐过渡到屏幕中心。目测是CSS 写的有点问题。

3个月前

@刘兵 老铁七夕快乐。。。markdown样式问题,我把这篇文章发出来的瞬间就后悔了

3个月前

跟 PHPquery 类似

3个月前
newbing

@右耳聆听心的声音 建议你querylist.cc 的首页,等所有CSS,html 下载完了,再显示页面吧。每次打开我都感觉好诡异的加载效果。

3个月前

比DomCrawler更好用吗?

1个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!