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

通过XPath提取mytuner-radio当前播放歌曲的歌手与歌名问题求助

问题排查与修正方案

原代码存在的核心问题

  • 标签拼写错误:XPath中误将span写成spam,导致无法匹配目标节点。
  • XPath索引逻辑错误:XPath的节点索引从1开始,原代码中用[0]会直接过滤掉所有节点;且表达式试图同时定位两个节点的写法逻辑混乱,无法正确匹配。
  • 请求头缺失:直接使用file_get_contents可能被网站反爬机制拦截,导致获取的网页内容不完整。

修正后的代码

<?php
$dom = new DOMDocument();
libxml_use_internal_errors(true);

// 添加模拟浏览器的请求头,避免被网站拦截
$context = stream_context_create([
    'http' => [
        'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    ]
]);
$html = file_get_contents('https://mytuner-radio.com/pt/radio/radio-meo-music-414443/', false, $context);
$dom->loadHTML($html);

$xPath = new DOMXPath($dom);

// 定位第一个history-song节点(对应"正在播放"板块)
$currentSongNode = $xPath->query('//div[@class="history-song"]')->item(0);

if ($currentSongNode) {
    // 在当前节点内查询歌曲名
    $songName = $xPath->query('.//span[@class="song-name"]', $currentSongNode)->item(0)->textContent;
    // 在当前节点内查询歌手名
    $artistName = $xPath->query('.//span[@class="song-artist"]', $currentSongNode)->item(0)->textContent;
    
    echo "正在播放:{$songName} - {$artistName}\n";
} else {
    echo "未找到正在播放的歌曲信息\n";
}
?>

关键修正说明

  1. 修正了span的拼写错误,确保XPath能匹配到目标标签。
  2. 改用PHP的item(0)获取DOMNodeList中的第一个节点(对应页面上"正在播放"的内容),替代XPath中错误的[0]索引。
  3. 添加User-Agent请求头,模拟浏览器请求,确保能完整获取网页内容。
  4. 先定位到"正在播放"的父节点,再在其内部查询歌曲名和歌手名,逻辑更清晰可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:10:16