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

Google Sheets中IMPORTXML函数区域设置失效问题求助

解决Book Depository本地货币价格提取问题

问题原因

Book Depository的价格是根据请求携带的区域Cookie或IP地理位置返回的,Google Sheets的IMPORTXML默认发送的请求不带保加利亚区域的Cookie,也不会模拟本地IP,所以不管表格设置成什么区域,网站都会返回默认的美元价格。

解决办法

方法一:使用第三方插件ImportFromWeb

这个插件支持自定义请求头(包括Cookie),能模拟区域设置:

  1. 安装Google Sheets插件「ImportFromWeb」
  2. 使用公式(替换Cookie里的参数为你手动切换区域后获取的实际值):
    =IMPORTFROMWEB("https://www.bookdepository.com/1/9783836519885"; "//span[@class='sale-price']"; {"Cookie"; "countryCode=BG; currency=BGN"})
    
    提示:可以先在浏览器手动切换到保加利亚区域,然后通过开发者工具获取对应的Cookie参数

方法二:编写Google Apps Script自定义函数

如果不想用第三方插件,自己写脚本实现带Cookie的请求:

  1. 打开Google Sheets,点击「扩展」→「Apps脚本」
  2. 替换默认代码为以下内容:
    function getBookDepositoryPrice(url, countryCode, currency) {
      var headers = {
        "Cookie": "countryCode=" + countryCode + "; currency=" + currency
      };
      var options = {
        "headers": headers,
        "muteHttpExceptions": true
      };
      var response = UrlFetchApp.fetch(url, options);
      var html = response.getContentText();
      // 用正则匹配价格(比XML解析更适配动态页面)
      var priceMatch = html.match(/<span class="sale-price">(.*?)<\/span>/);
      return priceMatch ? priceMatch[1] : "未找到价格";
    }
    
  3. 保存脚本,回到表格输入公式:
    =getBookDepositoryPrice("https://www.bookdepository.com/1/9783836519885"; "BG"; "BGN")
    

关于第三个XPath无结果的说明

那个XPath对应的是页面动态渲染后的结构,但IMPORTXML获取的是网站返回的静态HTML,结构和浏览器里看到的不一样,所以会返回空值。用上面两种带Cookie的方法获取完整HTML后,再调整XPath或者用正则匹配会更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:05:14