如何在Google Sheets中获取亚马逊商品价格?IMPORTXML返回#N/A
解决Google Sheets IMPORTXML抓取意大利亚马逊价格返回#N/A的问题
我来帮你搞定这个问题——用IMPORTXML抓亚马逊价格返回#N/A是很常见的情况,主要逃不开两个原因:亚马逊的反爬机制拦截了请求,或者你用的XPath选择器已经失效了。下面给你具体的解决方案:
方案1:先更新XPath选择器(最快速的尝试)
首先,亚马逊的页面元素ID/类名经常会变,你原来用的priceblock_ourprice可能已经不是当前价格的对应元素了。你可以手动去页面确认:
- 打开目标亚马逊商品页,右键点击显示的价格(比如你说的853),选择「检查」
- 在开发者工具里找到包裹价格的HTML标签,现在意大利亚马逊的价格通常在带有
a-price-whole类的<span>标签里 - 把你的公式改成下面这样(注意把URL里的
&换成&,转义字符会影响请求):
=IMPORTXML("https://www.amazon.it/dp/B07NDW5NSW/ref=twister_B07P9DXZ1C?_encoding=UTF8&psc=1";"//span[@class='a-price-whole']")
如果运气好,这个改动就能直接拿到价格。
方案2:用Google Apps Script绕过反爬(更稳定)
如果上面的方法还是返回#N/A,基本就是亚马逊把IMPORTXML的请求识别成机器人拦截了。这时候用Google Apps Script模拟浏览器请求会更靠谱:
- 打开你的Google Sheet,点击顶部「扩展程序」→「Apps Script」
- 新建一个脚本项目,把默认代码删掉,替换成下面这段:
function getAmazonPrice(url) { // 模拟浏览器的请求头,避免被亚马逊拦截 var requestOptions = { 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' } }; try { var response = UrlFetchApp.fetch(url, requestOptions); var pageHtml = response.getContentText(); // 用正则匹配价格,适配意大利亚马逊的页面结构 var priceMatch = pageHtml.match(/<span class="a-price-whole">(.*?)<\/span>/); if (priceMatch && priceMatch[1]) { // 去除可能的多余字符,返回干净的价格数字 return priceMatch[1].replace(/[,.]/g, '').trim(); } else { return "未找到价格元素"; } } catch (error) { return "请求失败:" + error.toString(); } }
- 保存脚本(给项目起个名字,比如「Amazon Price Fetcher」),回到你的Sheet
- 在任意单元格里输入这个公式调用脚本:
=getAmazonPrice("https://www.amazon.it/dp/B07NDW5NSW/ref=twister_B07P9DXZ1C?_encoding=UTF8&psc=1")
- 第一次运行会弹出授权提示,按照步骤完成授权(需要允许脚本访问外部URL)
额外注意事项
- 亚马逊的页面结构会不定期更新,要是以后又失效了,记得重新检查元素或者调整正则表达式
- 不要频繁刷新请求,不然可能会被亚马逊暂时封禁IP
- 如果需要长期稳定抓取,最好考虑使用亚马逊官方的Product Advertising API,不过这个需要申请开发者账号,有一定门槛
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

