#QueryList# 简单、 灵活、强大的PHP采集工具

文章目录[隐藏]

介绍

我们有时需要抓取一个网页的内容,但只需要特定部分的信息,通常会用正则来解决,这当然没有问题。正则是一个通用解决方案,但特定情况下,往往有更简单快 捷的方法。比如你想查询一个编程方面的问题,当然可以使用 Google,但 stackoverflow 作为一个专业的编程问答社区,会提供给你更多,更靠谱的答案。

对于 html 页面,不应该使用正则的原因主要有 3 个

  • 1、编写条件表达式比较麻烦
    尤其对于新手,看到一堆”不知所云”的字符评凑在一起,有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征,正则写起来更是麻烦。
  • 2、效率不高
    对于 php 来说,正则应该是没有办法的办法,能通过字符串函数解决的,就不要劳烦正则了。用正则去处理一个 30 多 k 的文件,效率不敢保证。
  • 3、有 phpQuery
    如果你使用过jQuery,想获取某个特定元素应该是轻而易举的事情,phpQuery 让这成为了可能。

在介绍 QueryList 之前,有必要先来介绍一下 phpQuery。

phpQuery 是一个用 php 实现的类似 jQuery 的开源项目,可以在服务器端以 jQuery 的语法形式解析网页元素。

基本上 jQuery 的选择器都可以用在 phpQuery 上,phpQuery 很强大可以对 DOM 进行任何复杂的操作,而接下来要介绍的 QueryList 则相当于 phpQuery 的子集,发挥它采集方面的强大功能。

QueryList

QueryList 是一个基于 phpQuery 的PHP通用列表采集类,得益于 phpQuery,让使用 QueryList 几乎没有任何学习成本,只要会 CSS3 选择器就可以轻松使用 QueryList 了,它让 PHP 做采集像 jQuery 选择元素一样简单。
QueryList 的几个特点:

  • 1.只有一个核心的 API,静态方法 Query
  • 2.用 jQuery 选择器来选择页面元素
  • 3.自带过滤功能,可过滤掉无用的内容
  • 4.支持无限层级嵌套采集
  • 5.采集结果直接以采集规则以列表的形式有序的返回
  • 6.支持扩展

4.0 更新:

  1. 完全重写整个底层
  2. 完全 composer 化,不再支持手动安装
  3. PHP 版本必须大于 PHP7
  4. 更加模块化,更容易扩展
  5. 内置了强大的 http 插件和编码转换插件
  6. 拥有几乎所有与 jQuery 操作 DOM 完全相同的 API

 

安装 QueryList

QueryList 拥有与jQuery几乎完全相同的选择器规则和 DOM 操作 API,使用 QueryList 之前请确保你对 jQuery 有所了解以及对 CSS3 选择器所有了解;QueryList 完全依赖Composer,请确保你会使用 Composer.

注:如果你的 PHP 版本还停留在 PHP5,或者不会使用 Composer,你可以选择使用 QueryList3,QueryList3 支持 php5.3 以及手动安装。

QueryList3 文档:http://v3.querylist.cc

环境要求

  • PHP >= 7.0

安装

执行 composer 命令:

composer require jaeger/querylist

 

如果 composer 安装速度太慢,可以尝试执行下面命令更换国内镜像:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

 

使用

使用QueyList只需要编写规则库,然后把规则库传给 QueryList 的rules(),QueryList 就会自动按照规则库把内容全部采集回来了,而规则库是用 jQuery 选择器来编写的,所以使用 QueryList 的整个过程非常简单!

规则库的编写规则如下(简单模式):

$rules = array(
   '规则名' => array('jQuery 选择器','要采集的属性'),
   '规则名 2' => array('jQuery 选择器','要采集的属性'),
    ..........
);

下面我们来动手试试吧:
1.采集目标,下面的代码片段

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

2.编写采集规则

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

3.开始采集

// 过程:设置 HTML=>设置采集规则=>执行采集=>获取采集结果数据
$data = QueryList::html($html)->rules($rules)->query()->getData();
//打印结果
print_r($data->all());

结果如下:

Array
(
    [0] => Array
        (
            [text] => 
        QueryList 官网
    其它的一些文本
            [link] => http://querylist.cc
            [img] => http://querylist.com/2.jpg
            [other] => 其它的<b>一些</b>文本
        )
)

如果上面的代码你看懂了,那么恭喜你,你已经成功掌握了 QueryList 了!

下面是完整代码:

<?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 GIT 访问地址: http://git.querylist.cc

QueryList 官网: http://querylist.cc

QueryList 问答: http://wenda.querylist.cc

QueryList 指导文档: http://doc.querylist.cc

QueryList GitHub 地址: https://github.com/jae-jae/QueryList

QueryList GIT@OSC地址: http://git.oschina.net/jae/QueryList

Packagist 地址: https://packagist.org/packages/jaeger/querylist


如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:#QueryList# 简单、 灵活、强大的 PHP 采集工具
本文短地址:
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址