如何用Google Sheets的IMPORTXML公式抓取bonbast.com欧元汇率?为何无输出?
问题原因及解决办法
可能的原因
- 反爬机制拦截:bonbast.com可能识别出Google Sheets的
IMPORTXML请求属于自动化工具,直接返回空内容或阻止访问。这类工具的请求头特征明显,容易被网站的反爬策略拦截。 - 页面动态渲染:欧元汇率数据可能是通过JavaScript动态加载的,而
IMPORTXML只能抓取页面的静态HTML源码,无法获取JS渲染后生成的内容。 - XPath定位失效:目标元素的
id或页面结构已发生变化,//tr[@id='eur1']这个XPath已经无法匹配到对应的汇率元素。
解决建议
验证XPath有效性
打开bonbast.com页面,右键欧元汇率所在行→检查元素,查看静态HTML源码中是否存在id="eur1"的<tr>标签。如果不存在,说明页面结构已更新,需要重新生成正确的XPath:- 在开发者工具的Elements面板中,右键目标元素→Copy→Copy XPath,替换原公式中的路径。
绕过反爬/处理动态内容
若XPath正确但仍无法获取数据,大概率是反爬或动态加载导致,可改用Google Apps Script实现:function getEuroRate() { const url = "https://www.bonbast.com/"; 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(); // 用正则匹配欧元汇率(需根据实际页面结构调整) const match = html.match(/<tr[^>]*id="eur1".*?<td[^>]*>([\d,.]+)<\/td>/s); return match ? match[1] : "无法获取数据"; }在Google Sheets中通过「扩展程序→Apps Script」创建脚本,粘贴上述代码后保存,即可在单元格中用
=getEuroRate()调用获取汇率。替代方案
如果上述方法仍失效,可尝试查看浏览器开发者工具的Network面板,过滤XHR/Fetch请求,寻找包含汇率数据的接口,直接调用这类接口获取数据会更稳定。
内容的提问来源于stack exchange,提问作者Morteza Jafari
相关产品推荐
相关产品推荐

