返回介绍

Collection getData(Closure $callback = null)

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

获取采集结果数据,需要先执行query()方法。

  • 参数: $callback 可以通过这个回调函数进一步处理结果,替换内容、补全链接,下载图片等等;返回值不会修改原始data数据。 并且还可以在这个回调函数用使用QueyList进行嵌套无限级采集。

返回值

返回值为Laravel中Collection集合对象,通过它的all()方法可转为数组。

Collection文档:https://d.laravel-china.org/docs/5.4/collections

用法


采集所有图片链接,采集目标:

$html =<<<STR
    <div class="xx">
        <img data-src="/path/to/1.jpg" alt="">
    </div>
    <div class="xx">
        <img data-src="/path/to/2.jpg" alt="">
    </div>
    <div class="xx">
        <img data-src="/path/to/3.jpg" alt="">
    </div>
STR;

原始采集代码:

$data = QueryList::html($html)->rules(array(

        'image' => array('.xx>img','data-src')

    ))->query()->getData(function($item, $key){

        return $item;

    });

print_r($data->all());

/**
采集结果:
Array
(
    [0] => Array
        (
            [image] => /path/to/1.jpg
        )

    [1] => Array
        (
            [image] => /path/to/2.jpg
        )

    [2] => Array
        (
            [image] => /path/to/3.jpg
        )

)
**/

添加需求

输出的数组变成一维数组,改造采集代码:

$data = QueryList::html($html)->rules(array(

        'image' => array('.xx>img','data-src')

    ))->query()->getData(function($item){

        return $item['image'];

    });

print_r($data->all());
/**
采集结果:
Array
(
    [0] => /path/to/1.jpg
    [1] => /path/to/2.jpg
    [2] => /path/to/3.jpg
)
**/

继续添加需求

补全图片链接,改造采集代码:

$baseUrl = 'http://xxxx.com';

$data = QueryList::html($html)->rules(array(

        'image' => array('.xx>img','data-src')

    ))->query()->getData(function($item) use($baseUrl){

        return $baseUrl.$item['image'];

    });

print_r($data);
/**
采集结果:
Array
(
    [0] => https://www.wenjiangs.com/wp-content/uploads/2021/docimg6/31-ogtfscnuovp.jpg
    [1] => https://www.wenjiangs.com/wp-content/uploads/2021/docimg6/32-crqbawz5rsi.jpg
    [2] => https://www.wenjiangs.com/wp-content/uploads/2021/docimg6/33-4adrvamzz11.jpg
)
**/

完整代码

<?php

require 'vendor/autoload.php';

use QL\QueryList;

$html =<<<STR
    <div class="xx">
        <img data-src="/path/to/1.jpg" alt="">
    </div>
    <div class="xx">
        <img data-src="/path/to/2.jpg" alt="">
    </div>
    <div class="xx">
        <img data-src="/path/to/3.jpg" alt="">
    </div>
STR;

$baseUrl = 'http://xxxx.com';

$data = QueryList::html($html)->rules(array(

        'image' => array('.xx>img','data-src')

    ))->query()->getData(function($item) use($baseUrl){

        return $baseUrl.$item['image'];

    });

print_r($data->all());

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

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

发布评论

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