如何通过PHP DOM获取data-label为Date的td标签内容?
如何从DHL追踪页面提取特定data-label的内容
嘿,我来帮你搞定这个需求!要从DHL的追踪页面里获取所有data-label="Date"的<td>标签内容,这里有两种实用的方法,你可以根据情况选择:
方法一:使用DOMXPath(推荐,更高效)
DOMXPath可以直接通过属性选择器定位目标元素,不用遍历所有<td>,效率更高,尤其是在HTML结构复杂的时候。
$html = file_get_contents('https://nolp.dhl.de/nextt-online-public/de/search?piececode=TRACKING_NUMBER'); $dom = new DOMDocument; // 禁用HTML解析时的警告(DHL页面可能有不规范的HTML) libxml_use_internal_errors(true); $dom->loadHTML($html); libxml_clear_errors(); // 初始化XPath对象 $xpath = new DOMXPath($dom); // 用XPath查询所有data-label属性为"Date"的<td>元素 $dateNodes = $xpath->query('//td[@data-label="Date"]'); // 遍历结果输出内容 foreach ($dateNodes as $node) { // 获取纯文本内容(去掉多余空格) echo trim($node->textContent) . PHP_EOL; // 如果需要保留<td>标签本身,就用下面这行: // echo $dom->saveHtml($node) . PHP_EOL; }
代码说明:
libxml_use_internal_errors(true):用来屏蔽HTML解析时可能出现的警告,因为很多网站的HTML都不是完全规范的。//td[@data-label="Date"]:这是XPath表达式,意思是选中所有带有data-label="Date"属性的<td>元素,精准又高效。$node->textContent:获取元素的纯文本内容,如果需要保留<td>标签的HTML结构,就用$dom->saveHtml($node)。
方法二:遍历所有并判断属性
如果你不想用XPath,也可以在原来的遍历逻辑里加一个属性判断,这种方法更直观,适合简单场景:
$html = file_get_contents('https://nolp.dhl.de/nextt-online-public/de/search?piececode=TRACKING_NUMBER'); $dom = new DOMDocument; libxml_use_internal_errors(true); $dom->loadHTML($html); libxml_clear_errors(); foreach ($dom->getElementsByTagName('td') as $node) { // 检查当前<td>的data-label属性是否等于"Date" if ($node->getAttribute('data-label') === 'Date') { echo trim($node->textContent) . PHP_EOL; // 保留标签的话用:echo $dom->saveHtml($node) . PHP_EOL; } }
代码说明:
- 遍历所有
<td>元素后,用$node->getAttribute('data-label')获取属性值,和"Date"做严格比较,符合条件就输出内容。
内容的提问来源于stack exchange,提问作者Trombone0904
相关产品推荐
相关产品推荐

