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
相关产品推荐
相关产品推荐

