You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用Simple HTML DOM获取data-odd属性失效,求修复方案

修复网页数据抓取的建议

首先看了你提供的HTML结构和原来的代码,问题出在固定的子元素层级依赖上——原来的代码硬编码了四层children(0)嵌套,但现在页面里带data-odd的span只嵌套了三层(td > span > span > span),多那一层就会找不到元素,导致函数失效。

更稳妥的做法是不要依赖固定的DOM嵌套深度,而是直接查找元素及其子元素中带有data-odd属性的节点,这样哪怕页面结构微调(比如增减一层span),代码也能正常工作。

给你修改后的print_odd函数(假设你用的是simple_html_dom库):

function print_odd($odd) {
    // 优先检查当前td元素自身是否带有data-odd属性
    if (isset($odd->attr['data-odd'])) {
        return $odd->attr['data-odd'];
    }
    
    // 查找当前td下所有带有data-odd属性的子元素,取第一个匹配的
    $target_odd = $odd->find('[data-odd]', 0);
    if ($target_odd) {
        return $target_odd->attr['data-odd'];
    }
    
    // 兜底返回null,避免因找不到元素抛出错误
    return null;
}

为什么这个方案更可靠?

  • 不再依赖固定的嵌套层级:不管data-odd是直接在td上,还是藏在嵌套的span里,都能被找到
  • 容错性更强:如果某个节点没有data-odd,会返回null而不是直接报错,方便你后续处理异常情况

另外,建议你后续抓取时尽量用属性选择器(比如[data-odd])定位关键元素,而不是靠DOM结构的位置或嵌套关系,因为网站更新时更倾向于调整结构,而非修改业务相关的data属性。

内容的提问来源于stack exchange,提问作者Marci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:52:42