0

0

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

心靈之曲

心靈之曲

发布时间:2025-03-08 08:02:10

|

988人浏览过

|

来源于php中文网

原创

querylist递归采集时,range方法避免数据合并详解

使用QueryList进行多级数据采集时,递归调用querydata函数容易导致range()方法出现数据合并问题。本文通过一个案例分析range()方法在递归调用中的作用,并解释文档示例与实际运行结果的差异。

问题描述:

以下代码尝试从HTML结构中提取标题(h3)和列表(.list)信息,列表中包含多个子项(.item)。递归调用querydata函数提取子项时,item字段数据却合并了,而非预期的独立列表。

代码示例:

$html = <<<str
- ### xxx
    <div class="list"><div class="item">item1</div><div class="item">item2</div> </div>
- ### xxx2
    <div class="list"><div class="item">item12</div><div class="item">item22</div> </div>
str;

$data = querylist::html($html)
    ->rules([
        'title' => ['h3', 'text'],
        'list' => ['.list', 'html']
    ])
    ->range('#demo li') // 这里假设存在<ul id="demo"><li>...</li></ul>结构,否则range无效
    ->querydata(function ($item) {
        $item['list'] = querylist::html($item['list'])
            ->rules([
                'item' => ['.item', 'text']
            ])
            ->range('') // 清空range,避免继承外部range
            ->querydata();
        return $item;
    });
dump($data);

运行结果(预期与实际结果差异):

如果代码中range('')被省略,则item字段内容会合并:

超能文献
超能文献

超能文献是一款革命性的AI驱动医学文献搜索引擎。

下载
<code>Array ( 
    [0] => Array ( [title] => xxx [list] => Array ( [item] => item1item2 ) ) 
    [1] => Array ( [title] => xxx2 [list] => Array ( [item] => item12item22 ) ) 
)</code>

添加range('')后,结果将正确地显示为独立列表:

<code>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 ) ) ) 
)</code>

问题分析:

range('#demo li') 指定了外层循环选择#demo下的li元素。 如果内部querydata函数忽略range(''),内部querylist对象会继承外层range('#demo li')设置。这导致内部循环仍然作用于所有li元素,而非当前li元素下的.item元素,从而造成item字段内容合并。range('')清空范围选择,确保内部循环只处理传入的$item['list'] HTML片段。

解决方法:

在内部querydata函数中使用range('')重置范围选择,强制querylist对象仅处理当前$item['list'] HTML片段,避免范围继承问题。

结论:

理解range()方法在QueryList递归调用中的作用至关重要。 在递归调用中,务必在每个querydata函数中根据实际需求设置或重置range()参数,以避免数据合并或其他意外结果。 本例中,range('')的运用有效地解决了数据合并问题,确保了递归采集的准确性。 需要注意的是,示例代码中的range('#demo li')需要对应的HTML结构存在,否则该range将无效。 QueryList递归采集时,Range方法如何避免数据合并?

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

436

2023.08.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

43

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

37

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

22

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

19

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

267

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

50

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号