插件窝 干货文章 QueryList递归采集时,Range方法如何避免数据合并?

QueryList递归采集时,Range方法如何避免数据合并?

数据 数据项 处理 采集 440    来源:    2025-03-14

在使用QueryList进行递归采集时,range方法用于指定采集的范围。如果你希望在递归采集时避免数据合并,可以通过以下方式来实现:

1. 使用each方法逐个处理数据

each方法可以逐个处理采集到的数据,而不是将所有数据合并在一起。你可以在each方法中处理每个采集到的数据项,并将其存储到单独的变量或数组中。

use QL\QueryList;

$url = 'http://example.com';
$data = [];

QueryList::get($url)->range('your-range-selector')->rules([
    'title' => ['h1', 'text'],
    'link' => ['a', 'href']
])->query()->each(function($item) use (&$data) {
    // 处理每个采集到的数据项
    $data[] = $item;
});

print_r($data);

2. 使用map方法处理数据

map方法可以对采集到的数据进行映射处理,并且不会自动合并数据。你可以在map方法中对每个数据项进行处理,并将其存储到单独的变量或数组中。

use QL\QueryList;

$url = 'http://example.com';

$data = QueryList::get($url)->range('your-range-selector')->rules([
    'title' => ['h1', 'text'],
    'link' => ['a', 'href']
])->query()->map(function($item) {
    // 处理每个采集到的数据项
    return $item;
})->all();

print_r($data);

3. 使用reduce方法处理数据

reduce方法可以对采集到的数据进行累加处理,并且不会自动合并数据。你可以在reduce方法中对每个数据项进行处理,并将其存储到单独的变量或数组中。

use QL\QueryList;

$url = 'http://example.com';

$data = QueryList::get($url)->range('your-range-selector')->rules([
    'title' => ['h1', 'text'],
    'link' => ['a', 'href']
])->query()->reduce(function($carry, $item) {
    // 处理每个采集到的数据项
    $carry[] = $item;
    return $carry;
}, []);

print_r($data);

4. 使用getData方法获取原始数据

如果你不希望QueryList自动合并数据,可以使用getData方法获取原始数据,然后手动处理这些数据。

use QL\QueryList;

$url = 'http://example.com';

$data = QueryList::get($url)->range('your-range-selector')->rules([
    'title' => ['h1', 'text'],
    'link' => ['a', 'href']
])->query()->getData();

print_r($data);

5. 使用setData方法手动设置数据

如果你希望完全控制数据的处理过程,可以使用setData方法手动设置数据。

use QL\QueryList;

$url = 'http://example.com';

$data = [];

QueryList::get($url)->range('your-range-selector')->rules([
    'title' => ['h1', 'text'],
    'link' => ['a', 'href']
])->query()->setData(function($item) use (&$data) {
    // 处理每个采集到的数据项
    $data[] = $item;
});

print_r($data);

总结

通过使用eachmapreducegetDatasetData方法,你可以在QueryList递归采集时避免数据合并,并根据需要处理每个采集到的数据项。选择合适的方法取决于你的具体需求和数据处理逻辑。