我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

在以前的文章里面,苏南大叔举的例子都是只采集一次就成型的。但是,事实上在实际情况中,经常会碰到需要递归多层采集的情况,那么本文中,苏南大叔就拿着官方的例子,说一下递归多级采集的代码写法:

苏南大叔:QueryList 如何实现多级递归采集? - 多级递归采集
QueryList 如何实现多级递归采集?(图1-1)

基本说明

可以在getData()方法中多次调用QueryList来实现递归多级采集。所以基本套路是这样的:

$ql->getData(function($item){
        $item['...'] = QueryList::html($item['...'])->...()->query()->getData();
        return $item;
});

上面的是套路代码,注意替换...字样。

代码示例

require 'QueryList/vendor/autoload.php';
use QL\QueryList;
//获取每个li里面的h3标签内容,和class为item的元素内容
$html =<<<STR
    <div id="demo">
        <ul>
            <li>
              <h3>xxx</h3>
              <div class="list">
                <div class="item">item1</div>
                <div class="item">item2</div>
              </div>
            </li>
             <li>
              <h3>xxx2</h3>
              <div class="list">
                <div class="item">item12</div>
                <div class="item">item22</div>
              </div>
            </li>
        </ul>
    </div>
STR;
$data = QueryList::html($html)->rules(array(
        'title' => array('h3','text'),
        'list' => array('.list','html')
    ))->range('#demo li')->query()->getData(function($item){
        $item['list'] = QueryList::html($item['list'])->rules(array(
                 'item' => array('.item','text')
            ))->query()->getData();
        return $item;
});
print_r($data);

结果类似如下:

Array
(
    [0] => Array
        (
            [title] => xxx
            [list] => Array
                (
                    [0] => Array
                        (
                            [item] => item1
                        )
                    [1] => Array
                        (
                            [item] => item2
                        )
                )
        )
    [1] => Array
        (
            [title] => xxx2
            [list] => Array
                (
                    [0] => Array
                        (
                            [item] => item12
                        )
                    [1] => Array
                        (
                            [item] => item22
                        )
                )
        )
)

总结

苏南大叔的QueryList系列教程基础部分,就到这里暂告一个段落。在未来的文章里面,苏南大叔计划描述一下QueryList的插件体系。通过这些插件的安装使用,就可以为QueryList增加很多新的功能了。

这里也许有两个插件,在日常工作中,是大家可能会用到的。大家可以看看。

更多苏南大叔的QueryList的经验文章,记得查看下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    querylist