如何从URL的HTML元素抓取数据?优化RSS转表格的Google Apps Script
改造Google Apps Script:抓取RSS并补充文章内容到表格
下面是修改后的完整脚本,已实现从RSS获取标题、发布时间、文章链接,并从每个文章页面抓取div.entry-content的内容,最后将四组数据更新到表格中:
function myFunction() { getURLData(); } function getURLData() { var currentData = []; var urltoCheck = ["https://e-ficiencia.com/feed/", "https://www.climanoticias.com/feed/all","https://www.proinstalaciones.com/actualidad/noticias?format=feed"]; for (var i = 0; i < urltoCheck.length; i++){ try { var rssResponse = UrlFetchApp.fetch(urltoCheck[i]); var xml = rssResponse.getContentText(); let response = XmlService.parse(xml); var root = response.getRootElement(); let channel = root.getChild('channel'); let items = channel.getChildren('item'); items.forEach(item => { try { let title = item.getChild('title')?.getText() || ''; let pubDateb = item.getChild('pubDate')?.getText() || ''; let link = item.getChild('link')?.getText() || ''; let description = getArticleDescription(link); currentData.push([title, pubDateb, description, link]); } catch (itemErr) { console.log(`处理RSS条目出错: ${itemErr.message}`); } }); } catch (rssErr) { console.log(`抓取RSS源出错(${urltoCheck[i]}): ${rssErr.message}`); } } if (currentData.length === 0) { console.log("没有抓取到有效数据"); return; } var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Sheet1"); var currentDataRange = sheet.getRange(sheet.getLastRow() + 1, 1, currentData.length, currentData[0].length); currentDataRange.setValues(currentData); } // 从文章链接提取指定class的内容 function getArticleDescription(link) { if (!link) return ''; try { var pageResponse = UrlFetchApp.fetch(link, {muteHttpExceptions: true}); if (pageResponse.getResponseCode() !== 200) { console.log(`文章链接无法访问(${link}): 状态码 ${pageResponse.getResponseCode()}`); return ''; } var html = pageResponse.getContentText(); var doc = HtmlService.createHtmlOutput(html).getContent(); var parser = new DOMParser(); var document = parser.parseFromString(doc, 'text/html'); // 抓取class为entry-content的div内容 var contentDiv = document.querySelector('div.entry-content'); if (!contentDiv) { console.log(`文章(${link})未找到指定元素div.entry-content`); return ''; } // 提取文本内容,去除多余换行和空格 return contentDiv.textContent.trim().replace(/\s+/g, ' '); } catch (err) { console.log(`提取文章内容出错(${link}): ${err.message}`); return ''; } }
核心改动说明
- 新增文章内容提取函数:
getArticleDescription(link)专门处理单篇文章的内容抓取,通过HTML解析定位到你指定的div.entry-content元素,提取并清理文本内容 - 容错机制升级:在RSS源抓取、单条RSS条目处理、文章内容提取三个环节都加了错误捕获,就算某个链接出问题,整个脚本也不会直接崩溃,还能在控制台看到错误原因
- 字段兜底处理:用
?.和|| ''确保就算RSS条目里缺少某个字段,脚本也不会报错,而是用空字符串代替 - 数据结构调整:把要写入表格的数组从3个元素改成4个,对应标题、发布时间、内容描述、文章链接四列
内容的提问来源于stack exchange,提问作者T6VK
相关产品推荐
相关产品推荐

