如何使用Cheerio爬取指定图片并插入到Google Sheets中
修正后代码
function insertGasStorageChartToSheet() { // 目标网页基础路径与完整路径 const baseUrl = 'https://ir.eia.gov/ngs/'; const pageUrl = baseUrl + 'ngs.html'; // 请求获取网页源码 const pageContent = UrlFetchApp.fetch(pageUrl, { muteHttpExceptions: true }).getContentText(); const $ = Cheerio.load(pageContent); // 两种定位方式二选一即可,无需依赖元素索引,适配复用需求 // 方式1:通过src属性精准匹配,稳定性更高 const targetImg = $('img[src="ngs.gif"]'); // 方式2:通过alt属性精准匹配 // const targetImg = $('img[alt="Working Gas in Underground Storage Compared with Five-Year Range"]'); // 校验是否找到目标图片,避免网页结构变更时报错 if (targetImg.length === 0) { throw new Error('未找到指定图片,请检查网页结构是否更新'); } // 拼接图片完整绝对路径 const imgFullUrl = baseUrl + targetImg.attr('src'); // 插入到当前激活工作表的A1单元格位置 SpreadsheetApp.getActiveSheet().insertImage(imgFullUrl, 1, 1); }
核心修改说明
- 修正了元素定位逻辑:使用Cheerio的属性选择器直接匹配img标签的src或alt属性,不需要依赖元素索引,符合多场景复用的需求
- 补充了相对路径转绝对路径的逻辑:原网页中img的src是相对路径,需要和网页的基础路径拼接后才能被正常访问加载
- 新增了元素存在性校验,避免网页结构更新后代码无意义报错
- 修复了原代码的语法错误:原代码中
attr('src').find('ngs.gif')的写法不成立,attr()返回的是字符串,无法调用find方法
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

