返回介绍

递归多级采集

发布于 2021-04-06 13:23:43 字数 2326 浏览 967 评论 0 收藏 0

可以在getData()方法中多次调用QueryList来实现递归多级采集。

使用场景:如采集多级菜单,需要先采集第一级菜单,然后采集第二级菜单,以此类推。

示例

采集代码:
<?php
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')->queryData(function($item){
        // 注意这里的QueryList对象与上面的QueryList对象是同一个对象
        // 所以这里要重置range()参数,否则会共用前面的range()参数,导致出现采集不到结果的诡异现象
        $item['list'] = QueryList::html($item['list'])->rules(array(
                 'item' => array('.item','text')
            ))->range('')->queryData();
        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
                        )
                )
        )
)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文