Google Sheets中IMPORTXML函数区域设置失效问题求助
解决Book Depository本地货币价格提取问题
问题原因
Book Depository的价格是根据请求携带的区域Cookie或IP地理位置返回的,Google Sheets的IMPORTXML默认发送的请求不带保加利亚区域的Cookie,也不会模拟本地IP,所以不管表格设置成什么区域,网站都会返回默认的美元价格。
解决办法
方法一:使用第三方插件ImportFromWeb
这个插件支持自定义请求头(包括Cookie),能模拟区域设置:
- 安装Google Sheets插件「ImportFromWeb」
- 使用公式(替换Cookie里的参数为你手动切换区域后获取的实际值):
提示:可以先在浏览器手动切换到保加利亚区域,然后通过开发者工具获取对应的Cookie参数=IMPORTFROMWEB("https://www.bookdepository.com/1/9783836519885"; "//span[@class='sale-price']"; {"Cookie"; "countryCode=BG; currency=BGN"})
方法二:编写Google Apps Script自定义函数
如果不想用第三方插件,自己写脚本实现带Cookie的请求:
- 打开Google Sheets,点击「扩展」→「Apps脚本」
- 替换默认代码为以下内容:
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] : "未找到价格"; } - 保存脚本,回到表格输入公式:
=getBookDepositoryPrice("https://www.bookdepository.com/1/9783836519885"; "BG"; "BGN")
关于第三个XPath无结果的说明
那个XPath对应的是页面动态渲染后的结构,但IMPORTXML获取的是网站返回的静态HTML,结构和浏览器里看到的不一样,所以会返回空值。用上面两种带Cookie的方法获取完整HTML后,再调整XPath或者用正则匹配会更可靠。
内容的提问来源于stack exchange,提问作者Ivo
相关产品推荐
相关产品推荐

