如何将依赖JavaScript的赛事网站数据导入Google Sheets?
解决Tournament Software赛事数据导入Google Sheets的问题
问题背景
目标赛事页面依赖JavaScript渲染数据,Google Sheets原生的IMPORTXML/IMPORTHTML无法获取动态内容;使用Apipheny时出现Failed to fetch data - please verify your API Request: {DNS error错误。
方案1:通过Google Apps Script调用网站隐藏API(最稳定)
多数动态网站会通过后台API加载数据,先找到数据接口:
- 打开赛事页面,按F12打开开发者工具,切换到「网络」标签
- 刷新页面,筛选「XHR/Fetch」类型的请求,查找包含
matches、data等关键词的JSON格式接口 - 复制接口完整URL,确认是否需添加日期参数(确保只获取当日比赛)
使用以下脚本导入数据:
function importTournamentMatches() { // 替换为你找到的真实API接口URL const apiUrl = "https://www.tournamentsoftware.com/api/tournament/b731fdcd-a0c8-4558-9344-2a14c267ee8b/matches"; // 如需日期筛选,可在URL后追加参数,例如?date=2024-05-20 try { const response = UrlFetchApp.fetch(apiUrl, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" } }); const rawData = JSON.parse(response.getContentText()); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 清空现有内容 sheet.clearContents(); // 写入表头和数据 if (rawData.length > 0) { const headers = Object.keys(rawData[0]); sheet.getRange(1, 1, 1, headers.length).setValues([headers]); const rows = rawData.map(item => Object.values(item)); sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); } } catch (e) { SpreadsheetApp.getUi().alert("导入失败:" + e.message); } }
操作步骤:
- 打开目标Google Sheets,点击「扩展程序」→「Apps Script」
- 粘贴代码并替换
apiUrl为找到的真实接口 - 点击运行按钮,授权脚本权限
- 可设置时间触发器,实现每日自动更新
方案2:修复Apipheny的DNS错误
- 检查输入的API URL是否完整、无拼写错误
- 在Apipheny请求设置中添加
User-Agent请求头(参考方案1中的UA值) - 确认网络环境可正常访问
tournamentsoftware.com(可通过ping域名排查DNS问题) - 若Apipheny支持代理,切换至其他代理节点重试
方案3:第三方抓取工具导出CSV后导入
使用ParseHub、Octoparse这类支持动态页面抓取的工具:
- 导入赛事页面URL,配置抓取规则(选择比赛数据所在的表格/元素)
- 设置日期筛选,仅抓取当日比赛
- 导出数据为CSV格式,再上传至Google Sheets
内容的提问来源于stack exchange,提问作者Tom Riley
相关产品推荐
相关产品推荐

