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

Google Sheets IMPORTXML加载失败:导入QS排名提示内容为空

QS排名导入Google Sheets显示「导入内容为空」的解决办法

问题根源

QS官网的排名数据是通过JavaScript动态渲染生成的,而Google Sheets的IMPORTXML这类内置工具只能抓取页面初始加载的静态HTML代码,无法解析JS动态生成的内容,所以会返回「导入内容为空」的提示。另外你使用的超长绝对XPath本身就极度脆弱,只要网站调整页面布局,这个路径就会直接失效,完全不适合用于数据抓取。

可行解决方案

1. 直接用QS官方导出功能(最省心)

打开QS 2024排名页面,找到表格区域附近的「下载/导出」按钮,选择导出为CSV格式,之后直接将CSV文件上传到Google Sheets即可;如果能获取到导出的CSV直链,也可以用IMPORTDATA函数直接导入。

2. 用Google Apps Script抓取动态内容(适合自动同步)

如果需要定期自动更新排名数据,可以写简单脚本模拟浏览器加载动态内容:

function getQSRankings() {
  const targetUrl = "https://www.topuniversities.com/university-rankings/world-university-rankings/2024";
  const fetchOptions = {
    muteHttpExceptions: true,
    headers: {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
  };
  
  // 获取页面完整内容
  const response = UrlFetchApp.fetch(targetUrl, fetchOptions);
  const pageHtml = response.getContentText();
  
  // 用正则提取大学名称(示例规则,可根据需求调整)
  const nameRegex = /<div class="uni-name">(.*?)<\/div>/g;
  let matchResult;
  const universityNames = [];
  while ((matchResult = nameRegex.exec(pageHtml)) !== null) {
    universityNames.push(matchResult[1]);
  }
  
  // 将结果写入当前工作表
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  activeSheet.getRange(1, 1, universityNames.length, 1).setValues(universityNames.map(name => [name]));
}

注意:如果QS官网调整页面结构,正则提取规则需要同步修改,否则会失效。

3. 放弃绝对XPath,改用相对选择器

绝对XPath完全依赖页面DOM层级,容错率极低,建议改用相对XPath或CSS选择器,比如抓取大学名称的相对XPath://div[@class='uni-name'],但这种方法仅适用于静态内容,动态内容仍需依赖前两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:13