You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:34:53