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

IMPORTXML返回空内容但XPath可用的问题求助

解决Google Sheets IMPORTXML返回空内容的问题

我来帮你排查下这个问题哈,虽然你在Scrapy里能正常拿到数据,但Google Sheets的IMPORTXML工具和Scrapy的请求逻辑有不少差异,这大概率是问题的根源,咱们一步步来解决:

1. 先确认Google Sheets实际请求到的内容

Google Sheets自带的请求头(比如User-Agent)和Scrapy不一样,有些网站会针对不同UA返回不同内容,甚至直接拦截非浏览器/非爬虫框架的请求。你可以先试一下用IMPORTXML抓取整个页面的文本,验证是不是真的拿到了空内容:

=IMPORTXML("https://www.feiertagskalender.ch/index.php?geo=3058&klasse=3&hl=en","//body/text()")

如果返回空白或者无意义内容,那基本可以确定是网站对Google Sheets的请求做了限制。

2. 用Google Apps Script自定义请求头绕过限制

既然IMPORTXML自带的请求头不被网站接受,咱们可以用Google Apps Script手动发送请求,自定义User-Agent(比如模拟Chrome浏览器的UA),再把数据返回到表格里。步骤如下:

  • 打开你的Google表格,点击菜单栏的「扩展程序」→「Apps Script」
  • 删除默认代码,粘贴下面的脚本:
function getHolidayData() {
  const url = "https://www.feiertagskalender.ch/index.php?geo=3058&klasse=3&hl=en";
  const options = {
    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(url, options);
  const html = response.getContentText();
  
  // 用正则提取你需要的内容(对应你之前XPath的目标:list-group下a标签里的第一个div文本)
  const regex = /<div class="list-group-item-heading">(.*?)<\/div>/g;
  let matches;
  const results = [];
  
  while ((matches = regex.exec(html)) !== null) {
    results.push([matches[1]]);
  }
  
  // 把结果写入表格的A列(从A1开始)
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1, 1, results.length, 1).setValues(results);
}
  • 保存脚本,点击运行按钮,第一次运行会要求授权,按照提示完成授权即可
  • 运行后,你的表格A列就会自动填充提取到的节日名称了

3. 额外排查点:检查网站的robots.txt

有些网站会在robots.txt里禁止Googlebot抓取特定页面,你可以访问网站根目录的robots.txt看看,如果里面有针对Googlebot的Disallow规则包含你要爬的页面路径,那IMPORTXML就会被限制,这时候用上面的Apps Script方法依然可以绕过(因为自定义UA不是Googlebot)。

内容的提问来源于stack exchange,提问作者p6l-richard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:57:41