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

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

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的经验文章,记得查看下面的链接:

 【源码】代码片段及相关软件点此获取

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

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!