从亚马逊获取ASIN图片至谷歌表格遇‘图片未找到’问题求助
问题原因与修复方案
核心问题
你的脚本返回“Image not found”,本质是fetchImageUrl函数没能从亚马逊页面提取到图片URL,主要原因有两个:
- 亚马逊页面HTML结构已更新,原正则表达式
/"large":"(https:[^"]+)"/匹配不到当前页面的图片地址 - 亚马逊反爬机制拦截了
UrlFetchApp的默认请求,返回的内容并非完整商品页
修复后的完整脚本
function fetchAndResizeImage(asin) { // 可根据实际使用的亚马逊站点修改域名,比如.ca/.co.uk等 var url = "https://www.amazon.com/dp/" + asin; var imageUrl = fetchImageUrl(url); if (imageUrl) { try { var imageBlob = UrlFetchApp.fetch(imageUrl, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } }).getBlob(); var resizedImageBlob = resizeImage(imageBlob, 10, 10); return resizedImageBlob; } catch (imgError) { return "Failed to fetch image"; } } else { return "Image not found"; } } function fetchImageUrl(url) { try { var response = UrlFetchApp.fetch(url, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Accept-Language": "en-US,en;q=0.9" }, followRedirects: true }); var htmlContent = response.getContentText(); // 匹配当前亚马逊商品页的主图高清地址 var imageMatch = /data-a-hires="(https:[^"]+)"/.exec(htmlContent); if (imageMatch) { return imageMatch[1]; } // 备用匹配规则,防止主规则失效 var backupMatch = /src="(https:\/\/m.media-amazon.com\/images\/I\/[^"]+)"[^>]+class="a-dynamic-image/.exec(htmlContent); return backupMatch ? backupMatch[1] : null; } catch (error) { console.log("提取图片URL失败: " + error.toString()); return null; } } function resizeImage(imageBlob, width, height) { var image = ImagesApp.open(imageBlob); // 保持图片比例,避免拉伸变形 var resizedImage = image.getResizedImage(width, height, ImagesApp.ResizeQuality.HIGH); return resizedImage.getBlob(); }
关键修改点
- 添加请求头:模拟浏览器请求,绕过亚马逊基础反爬拦截
- 更新正则匹配规则:适配当前亚马逊静态HTML中的图片地址属性(
data-a-hires对应商品主图的高清链接) - 增加备用匹配规则:主规则失效时,用备用规则兜底提取图片URL
- 增强错误处理:在图片获取环节添加异常捕获,返回更明确的错误信息
- 优化图片缩放:添加高质量缩放参数,避免图片模糊变形
额外注意事项
- 如果使用非美国亚马逊站点,需要修改
url中的域名(比如亚马逊德国站是amazon.de) - 若仍出现问题,可在脚本编辑器的「查看」→「日志」中查看具体错误信息,定位问题
- 亚马逊页面结构可能随时更新,若后续再次失效,需重新调整正则匹配规则
内容的提问来源于stack exchange,提问作者Jong Ramos
相关产品推荐
相关产品推荐

