Google Apps Script结合CheerioGS筛选指定表格及过滤特定行实现
可行实现代码
你之前的代码问题出在选择器的过滤逻辑错误,:contains 匹配的是当前元素及所有子元素的文本,直接在 inj-container 层用 :not(contains) 会误过滤,而且分两次遍历写入容易出现行错位问题。下面是修正后的可运行代码:
function PaginaDoJogo() { const sheet = SpreadsheetApp.getActive().getSheetByName('Dados Importados'); const url = 'https://www.sportsgambler.com/injuries/football/argentina-superliga/'; const contentText = UrlFetchApp.fetch(url).getContentText(); const $ = Cheerio.load(contentText); // 先定位到Argentinos Jrs对应的完整球队区块 const teamBlock = $('div.team-block:has(div.team-title:contains("Argentinos Jrs"))'); const output = []; // 遍历该区块下所有伤病行 teamBlock.find('div.inj-container').each((_, el) => { // 过滤掉info为Away on International duty的行 const infoText = $(el).find('span.inj-info').text().trim(); if (infoText === 'Away on International duty') return; // 提取球员名和回归时间 const player = $(el).find('span.inj-player').text().trim(); const returnDate = $(el).find('span.inj-return.h-sm').text().trim(); if (player && returnDate) output.push([player, returnDate]); }); // 批量写入表格,避免多次调用接口卡顿 if (output.length > 0) { sheet.getRange(2, 1, output.length, 2).setValues(output); } }
修改说明
- 先通过
team-block和team-title精准定位到Argentinos Jrs对应的球队数据区块,避免匹配到其他球队同名元素 - 统一遍历每一行数据后再做条件过滤,比选择器直接过滤更准确,不会出现误判
- 收集完所有符合条件的数据后批量写入表格,执行效率更高,也不会出现两次遍历导致的行列错位问题
- 增加了非空判断,避免写入空值
注意:运行前请确认你已经正确将CheerioGS库导入项目,且当前表格存在名为
Dados Importados的工作表,否则会触发报错。
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

