如何将指定网站XML格式体育赔率数据导入Google Spreadsheet?
嘿,我来帮你解决这个Google Sheets导入体育赔率的问题!之前用IMPORTHTML失效是因为网站换成XML格式了,别担心,咱们有两个可行方案,下面给你详细拆解:
方案一:用IMPORTXML函数直接导入(简单快捷)
IMPORTXML是Google Sheets专门用来抓取XML/HTML数据的函数,刚好适配现在的网站格式。你可以按列分别提取需要的字段:
- 先在你的Google表格里,把目标URL放在一个固定单元格,比如
A1,输入:http://www.scoresandodds.com/gameDate/2019-11-08 - 然后在其他列输入对应的公式:
- A列(主队名称):在
A2输入=IMPORTXML($A$1, "//game/teams/team[@is_home='1']/name"),回车后会自动填充所有主队名称 - B列(客队名称):在
B2输入=IMPORTXML($A$1, "//game/teams/team[@is_home='0']/name") - C列(实时比分/赛果):可以分开提取主客队比分再合并,比如
C2输入=IMPORTXML($A$1, "//game/teams/team[@is_home='1']/score") & " - " & IMPORTXML($A$1, "//game/teams/team[@is_home='0']/score") - D列(当前Spread Line):
D2输入=IMPORTXML($A$1, "//game/odds/spread/line") - E列(主队Moneyline):
E2输入=IMPORTXML($A$1, "//game/odds/moneyline/home") - F列(客队Moneyline):
F2输入=IMPORTXML($A$1, "//game/odds/moneyline/away")
- A列(主队名称):在
小技巧:验证XPath是否正确
如果公式返回错误,大概率是XPath路径不对。你可以打开目标URL,右键查看页面源代码,找到对应的XML节点,然后用Chrome开发者工具(按F12)选中节点,右键选择「复制」→「复制XPath」,替换公式里的路径即可。
方案二:用Google Apps Script自定义导入(更灵活)
如果IMPORTXML因为网站反爬或者结构复杂失效,就用脚本抓取,自由度更高:
- 打开你的Google表格,点击顶部菜单「工具」→「脚本编辑器」
- 清空默认代码,粘贴下面的脚本:
function importSportsOdds() { // 目标URL var url = "http://www.scoresandodds.com/gameDate/2019-11-08"; // 获取XML内容 var response = UrlFetchApp.fetch(url); var xmlDoc = XmlService.parse(response.getContentText()); var root = xmlDoc.getRootElement(); var games = root.getChildren("game"); // 获取当前工作表 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clearContents(); // 写入表头 var headers = ["主队", "客队", "比分", "Spread Line", "主队Moneyline", "客队Moneyline"]; sheet.getRange(1, 1, 1, headers.length).setValues([headers]); // 遍历所有比赛数据 for (var i = 0; i < games.length; i++) { var game = games[i]; var teams = game.getChild("teams").getChildren("team"); var homeTeam = "", awayTeam = "", homeScore = "", awayScore = ""; // 区分主客队 teams.forEach(function(team) { if (team.getAttribute("is_home").getValue() === "1") { homeTeam = team.getChild("name").getText(); homeScore = team.getChild("score").getText(); } else { awayTeam = team.getChild("name").getText(); awayScore = team.getChild("score").getText(); } }); // 提取赔率数据 var odds = game.getChild("odds"); var spreadLine = odds.getChild("spread").getChild("line").getText(); var homeMoneyline = odds.getChild("moneyline").getChild("home").getText(); var awayMoneyline = odds.getChild("moneyline").getChild("away").getText(); // 写入表格行 var rowIndex = i + 2; sheet.getRange(rowIndex, 1).setValue(homeTeam); sheet.getRange(rowIndex, 2).setValue(awayTeam); sheet.getRange(rowIndex, 3).setValue(`${homeScore} - ${awayScore}`); sheet.getRange(rowIndex, 4).setValue(spreadLine); sheet.getRange(rowIndex, 5).setValue(homeMoneyline); sheet.getRange(rowIndex, 6).setValue(awayMoneyline); } }
- 点击脚本编辑器顶部的「保存」,给脚本起个名字(比如
SportsOddsImporter) - 点击「运行」,第一次运行会要求授权,按照提示完成权限验证即可
进阶:设置定时自动更新
如果需要每天自动获取最新数据,点击脚本编辑器左侧的「触发器」图标,添加一个时间驱动触发器,设置每天固定时间运行importSportsOdds函数就行。
注意事项
- 如果网站XML结构有更新,需要对应调整XPath或者脚本里的节点名称(比如
game、teams这些标签) - 部分网站会限制非浏览器的请求,如果脚本返回错误,可以尝试给请求添加浏览器头,比如在
UrlFetchApp.fetch里加参数:UrlFetchApp.fetch(url, {headers: {"User-Agent": "Mozilla/5.0"}})
内容的提问来源于stack exchange,提问作者Jordan Taylor
相关产品推荐
相关产品推荐

