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

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

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

问题描述:

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

代码示例:

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

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

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

Array (     [0] => Array ( [title] => xxx [list] => Array ( [item] => item1item2 ) )     [1] => Array ( [title] => xxx2 [list] => Array ( [item] => item12item22 ) ) )

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

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

问题分析:

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方法如何避免数据合并?

以上就是QueryList递归采集时,Range方法如何避免数据合并?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1285462.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP字符串与数组对比:如何高效高亮显示长字符串中重复的子字符串?
上一篇 2025年12月11日 01:31:20
告别异步编程的噩梦:Guzzle Promises 助我轻松掌控异步操作
下一篇 2025年12月11日 01:31:35

相关推荐

  • win11桌面图标间距怎么调 win11桌面图标间距调整方法

    win11桌面图标间距怎么调 win11桌面图标间距调整方法win11桌面图标间距怎么调 win11桌面图标间距调整方法win11桌面图标间距怎么调 win11桌面图标间距调整方法win11桌面图标间距怎么调 win11桌面图标间距调整方法

    首先调整显示缩放比例至100%,其次通过注册表修改IconSpacing和IconVerticalSpacing值为-1125,最后关闭平板优化模式以恢复桌面图标正常间距。 如果您发现Windows 11桌面上的图标间距突然变得异常宽大,影响了视觉体验和使用效率,则可能是由于系统缩放设置或显示模式发…

    2026年10月2日 • 用户投稿
    000
  • qq浏览器视频怎么投屏到电视_qq浏览器网页视频投屏到电视操作方法

    qq浏览器视频怎么投屏到电视_qq浏览器网页视频投屏到电视操作方法qq浏览器视频怎么投屏到电视_qq浏览器网页视频投屏到电视操作方法qq浏览器视频怎么投屏到电视_qq浏览器网页视频投屏到电视操作方法qq浏览器视频怎么投屏到电视_qq浏览器网页视频投屏到电视操作方法

    1、QQ浏览器支持通过内置投屏功能将视频无线推送到同局域网的电视,操作路径为:播放视频→点击投屏图标→选择电视设备→连接成功后手机可遥控播放。2、若电视支持DLNA协议,可在全屏播放后通过“更多”选项选择“投屏”或“DLNA投屏”连接目标设备实现画面同步。3、当设备无法直接识别时,可通过安装乐播投屏…

    2026年10月2日 • 用户投稿
    100
  • 如何重命名现有 MySQL 表中的列?

    如何重命名现有 MySQL 表中的列?如何重命名现有 MySQL 表中的列?如何重命名现有 MySQL 表中的列?如何重命名现有 MySQL 表中的列?

    要重命名现有 MySQL 表中的列,我们可以使用带有 CHANGE 关键字的 ALTER TABLE 命令,如下所示 – mysql> Alter table Student CHANGE Email Emailid Varchar(30);Query OK, 5 rows aff…

    2026年10月2日 • 用户投稿
    000
  • 6 个“吓人”的 Linux 命令

    6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令

    正文 $ mcrypt xEnter the passphrase (maximum of 512 characters)Please use a combination of upper and lower case letters and numbers.Enter passphrase:Ent…

    2026年10月2日 • 用户投稿
    000
  • ChatGPT如何开启对话历史 对话记录管理教程

    ChatGPT如何开启对话历史 对话记录管理教程ChatGPT如何开启对话历史 对话记录管理教程ChatGPT如何开启对话历史 对话记录管理教程ChatGPT如何开启对话历史 对话记录管理教程

    管理ChatGPT的对话历史对于保护个人信息和整理思路很有帮助。本文将通过详细的步骤,向您展示如何开启或关闭对话历史记录功能,并介绍如何对已保存的对话进行重命名和删除等管理操作,帮助您轻松掌控自己的对话数据。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年10月2日 • 用户投稿
    200
  • 快速让小白理解ThinkPHP5模型的概念

    快速让小白理解ThinkPHP5模型的概念快速让小白理解ThinkPHP5模型的概念快速让小白理解ThinkPHP5模型的概念快速让小白理解ThinkPHP5模型的概念

    下面thinkphp框架教程栏目将给大家简析thinkphp5模型的概念,希望对需要的朋友有所帮助! 快速简单理解: MVC(Model View Controller)模型-视图-控制器 视图是用户看到并与之交互的界面,视图一般是由HTML元素组成的页面。ThinkPHP中的View文件夹。 立即…

    2026年10月2日 • 用户投稿
    100
  • java使用教程怎样实现基于TCP的网络通信 java使用教程的TCP编程入门技巧​

    java使用教程怎样实现基于TCP的网络通信 java使用教程的TCP编程入门技巧​java使用教程怎样实现基于TCP的网络通信 java使用教程的TCP编程入门技巧​java使用教程怎样实现基于TCP的网络通信 java使用教程的TCP编程入门技巧​java使用教程怎样实现基于TCP的网络通信 java使用教程的TCP编程入门技巧​

    java中实现tcp通信需编写服务器端和客户端代码,服务器使用serversocket监听端口并接受连接,客户端通过socket连接服务器,双方通过输入输出流交换数据,tcp确保可靠、有序传输。1. 服务器端创建serversocket绑定端口,调用accept()阻塞等待客户端连接,每接受一个连接…

    2026年10月2日 • 用户投稿
    000
  • Sublime Text 主题更换后显示异常的解决方法

    Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法

    更换sublime text主题后显示异常,通常由兼容性、配置或缓存问题导致。1. 检查主题是否兼容当前sublime text版本;2. 清理缓存文件夹;3. 确保package control正常工作并尝试重新安装;4. 手动下载主题并安装至packages目录;5. 检查主题文档并完成必要配置…

    2026年10月2日 • 用户投稿
    000
  • 苹果手机怎么取消连续包月续费

    苹果手机怎么取消连续包月续费苹果手机怎么取消连续包月续费苹果手机怎么取消连续包月续费苹果手机怎么取消连续包月续费

    苹果手机连续包月订阅取消步骤如下:打开 App Store。点击个人资料图标。选择“订阅”。找到并点击要取消的订阅项目。点击“取消订阅”按钮。确认取消。 苹果手机如何取消连续包月续费? 步骤 1:打开 App Store 点击 iPhone 主屏幕上的 App Store 图标。 步骤 2:点击个人…

    2026年10月2日 • 用户投稿
    000
  • Archiveofownour收藏夹导入教程_Archiveofownour中文版历史记录同步进入

    Archiveofownour收藏夹导入教程_Archiveofownour中文版历史记录同步进入Archiveofownour收藏夹导入教程_Archiveofownour中文版历史记录同步进入Archiveofownour收藏夹导入教程_Archiveofownour中文版历史记录同步进入Archiveofownour收藏夹导入教程_Archiveofownour中文版历史记录同步进入

    Archiveofownour收藏夹导入教程在个人中心的“数据管理”中,打开平台后点击“导入收藏夹”,上传HTML格式书签文件即可完成导入;多设备同步需登录同一账户并开启“同步设置”,支持端到端加密传输;平台还具备跨设备合并、智能标签、时间轴视图、自定义过滤及离线查看等核心功能。 Archiveof…

    2026年10月2日 • 用户投稿
    100
  • 解析Laravel事件系统的使用方法

    下面由laravel教程栏目带大家介绍关于laravel事件系统的使用方法,希望对大家有所帮助! Laravel 事件系统用法总结 Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。事件类保存在 app/Events 目录中,而这些事件的的监听器则被保存在 app…

    2026年10月2日
    000
  • 支付宝绑定的社保卡怎么取消_支付宝社保卡解绑的详细方法

    支付宝绑定的社保卡怎么取消_支付宝社保卡解绑的详细方法支付宝绑定的社保卡怎么取消_支付宝社保卡解绑的详细方法支付宝绑定的社保卡怎么取消_支付宝社保卡解绑的详细方法支付宝绑定的社保卡怎么取消_支付宝社保卡解绑的详细方法

    首先在支付宝卡包中找到电子社保卡,点击进入详情页后选择社保卡管理并解除关联,或通过市民中心医保服务及城市服务入口完成解绑操作。 如果您尝试在支付宝中管理已绑定的电子社保卡,但希望取消其关联,则需要通过特定的解绑流程来操作。以下是详细的解决方法: 本文运行环境:iPhone 15 Pro,iOS 18…

    2026年10月2日 • 用户投稿
    100
  • 现在是手机厂商们抛弃128GB的时候了

    现在是手机厂商们抛弃128GB的时候了现在是手机厂商们抛弃128GB的时候了现在是手机厂商们抛弃128GB的时候了现在是手机厂商们抛弃128GB的时候了

    9月10日,苹果正式推出iphone 17系列,带来一项引人注目的变革:全系机型统一标配256gb起跳的存储容量。 这一看似基础的硬件调整,实则掀开了智能手机存储新时代的序幕。在用户频频为128GB空间不够用而烦恼之际,苹果率先迈出一步,向整个行业传递明确信号:128GB的时代已经落幕。 数字生活的…

    2026年10月2日 • 用户投稿
    2100
  • MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?

    MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?MySQL和Oracle:学习大数据技术时的两大选择,如何抉择?

    MySQL和Oracle:学习大数据技术时的两大选择,如何抉择? 当今社会,数据正以爆炸式的速度增长。对于那些想要进入大数据行业的学习者来说,熟悉常见的数据库管理系统是至关重要的一步。而在数据库领域,MySQL和Oracle是两个备受关注的选项。那么,在学习大数据技术时,应该如何选择MySQL还是O…

    2026年10月2日 • 用户投稿
    000
  • 炫书网海量小说在线读_炫书网TXT下载官方区

    炫书网海量小说在线读_炫书网TXT下载官方区炫书网海量小说在线读_炫书网TXT下载官方区炫书网海量小说在线读_炫书网TXT下载官方区炫书网海量小说在线读_炫书网TXT下载官方区

    炫书网TXT下载官方区位于其官网https://www.xsw99.com/,提供海量小说在线阅读与下载。平台覆盖都市、悬疑、穿越、灵异、科幻等多种类型,内容持续更新,支持关键词精准搜索,确保章节完整。阅读功能含离线缓存、智能省流、云书签同步,界面可自定义。用户无需注册即可浏览,页面加载快,支持历史…

    2026年10月2日 • 用户投稿
    000
  • 华为 Mate 80 或 11 月发,细节再曝

    华为 Mate 80 或 11 月发,细节再曝华为 Mate 80 或 11 月发,细节再曝华为 Mate 80 或 11 月发,细节再曝华为 Mate 80 或 11 月发,细节再曝

    随着10月的到来,关于华为下一代mate系列旗舰的爆料信息也逐渐清晰起来。 近期,知名数码博主 @数码闲聊站 发布消息称:“前两天提到的那款就是华为 Mate80 系列,代号为 Voyager/Sagittarius。其中 VYG 标准版支持 66W 有线快充,SGT Pro 系列则配备 100W …

    2026年10月2日 • 用户投稿
    000
  • win10如何格式化C盘_Win10重装系统时格式化C盘方法

    win10如何格式化C盘_Win10重装系统时格式化C盘方法win10如何格式化C盘_Win10重装系统时格式化C盘方法win10如何格式化C盘_Win10重装系统时格式化C盘方法win10如何格式化C盘_Win10重装系统时格式化C盘方法

    使用“重置此电脑”可直接清理C盘并重装系统;通过U盘启动PE系统能绕过运行环境格式化C盘;利用Windows安装U盘在安装过程中对C盘进行格式化是最常见可靠的方法。 如果您需要在重装Windows 10系统时彻底清除C盘上的所有数据并重新安装操作系统,直接通过文件资源管理器进行格式化是不可行的,因为…

    2026年10月2日 • 用户投稿
    100
  • ChatGPT如何调整回答风格 个性化设置指南

    ChatGPT如何调整回答风格 个性化设置指南ChatGPT如何调整回答风格 个性化设置指南ChatGPT如何调整回答风格 个性化设置指南ChatGPT如何调整回答风格 个性化设置指南

    要让ChatGPT的回答更符合个人需求,并不需要复杂的设置,关键在于掌握如何通过提问来引导和塑造其输出风格。本文将介绍如何通过给出明确的指令,从角色设定、格式要求和语气风格三个层面,分步骤讲解如何定制化ChatGPT的回答,让您能够轻松获得更贴心、更具个性的互动体验。 ☞☞☞AI 智能聊天, 问答助…

    2026年10月2日 • 用户投稿
    100
  • 苹果手机取消连续包月自动续费

    苹果手机取消连续包月自动续费苹果手机取消连续包月自动续费苹果手机取消连续包月自动续费苹果手机取消连续包月自动续费

    可以使用以下步骤取消苹果手机上的连续包月自动续费:打开“设置”;前往“Apple ID”;选择“订阅”;找到要取消订阅的应用程序或服务;点击“取消订阅”;确认取消。 如何取消苹果手机连续包月自动续费 苹果手机上的连续包月订阅可以方便用户自动续订服务,但有时用户可能需要取消订阅。本文将指导您逐步取消苹…

    2026年10月2日 • 用户投稿
    300
  • 为什么建议大家使用 Linux 开发?

    正文 Linux 能用吗?我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上。当我告诉他或者建议他使用 linux 时,会一脸惊讶的问我,那个怎么用(来开发或者日常使用)?这是我使用了近两年的“国产”操作系统 deepin ,界面美不美观我不知道,能用是肯定的。首先 Vim/Em…

    用户投稿 2026年10月2日
    000

发表回复

登录后才能评论
关注微信