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

使用DomCrawler获取<time>标签dateTime属性失败求助

DomCrawler无法获取

问题场景

给定HTML:

<time dateTime="2023-12-28T20:03:13.359+01:00">28 December 2023</time>
  • 能正常获取meta标签的content属性:
$meta_description = $crawler->filter('meta[name="description"]')->attr('content');
  • 调用$crawler->filter('time')->attr('dateTime')无法获取到dateTime属性
  • 但调用$crawler->filter('time')->text()能正常返回文本内容28 December 2023

原因分析

  1. HTML属性大小写特性:HTML中的属性名是大小写不敏感的,但DomCrawler底层依赖的PHP DOM扩展会自动将所有HTML属性名转换为小写。你代码里用的驼峰式dateTime和实际DOM中存储的小写datetime不匹配,导致无法读取。
  2. 多节点匹配问题:如果页面存在多个<time>标签,attr()方法只会返回第一个匹配节点的属性。若第一个<time>标签没有datetime属性,也会返回null。

解决办法

1. 使用小写属性名datetime

直接用小写的属性名调用attr():

$published_at = $crawler->filter('time')->attr('datetime');

2. 精确过滤目标节点

如果页面有多个<time>标签,建议增加筛选条件确保选中正确的节点,比如直接筛选带有datetime属性的<time>:

$published_at = $crawler->filter('time[datetime]')->first()->attr('datetime');

3. 直接操作DOMNode对象

如果上述方法仍不生效,可以直接获取DOM节点对象,调用原生的getAttribute()方法:

$timeNode = $crawler->filter('time')->getNode(0);
if ($timeNode) {
    $published_at = $timeNode->getAttribute('datetime');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:46:24