解决Google Sheet IMPORTXML获取Shazam实时数字返回空内容问题
解决Google Sheet IMPORTXML获取Shazam实时数据返回空的问题
问题原因
Shazam的页面内容是通过JavaScript动态渲染的,而IMPORTXML只能抓取服务器直接返回的静态HTML源码,无法识别JS加载后的动态元素,因此会返回「Imported content is empty」。
解决方法
方法1:使用Google Apps Script自定义函数
这是最可靠的方案,能抓取动态渲染后的内容并实现定时更新:
- 打开目标Google Sheet,点击「扩展程序」→「Apps Script」
- 删除默认代码,粘贴以下脚本:
function getShazamPlays(trackId) { const url = `https://www.shazam.com/track/${trackId}/cruel-summer`; const response = UrlFetchApp.fetch(url, { headers: { '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' } }); const html = response.getContentText(); // 匹配页面中的播放量数字(可根据页面结构调整正则) const playCountMatch = html.match(/<em[^>]*>([\d,.]+)<\/em>/); if (playCountMatch && playCountMatch[1]) { // 移除千位分隔符,返回纯数字 return playCountMatch[1].replace(/,/g, ''); } else { return "数据获取失败"; } }
- 保存脚本(命名例如
ShazamDataTool),首次运行会提示授权,按指引完成权限验证 - 在Sheet单元格中输入
=getShazamPlays(488840226),即可获取目标歌曲的播放量
设置每小时自动更新
- 在Apps Script界面点击「编辑」→「当前项目的触发器」
- 点击「添加触发器」,配置:
- 选择函数:
getShazamPlays - 事件源:「时间驱动」
- 类型:「小时计时器」,选择每小时执行一次
- 选择函数:
方法2:验证并修正XPath(仅针对静态内容)
如果坚持用IMPORTXML,需重新确认目标元素的正确XPath:
- 打开Shazam歌曲页面,按F12打开开发者工具
- 找到播放量元素,右键选择「复制」→「复制 XPath」
- 替换原公式中的XPath,但注意:若元素是JS动态生成,此方法仍会返回空,仅适用于静态渲染的内容
内容的提问来源于stack exchange,提问作者hani lim
相关产品推荐
相关产品推荐

