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

GAS环境下Cheerio爬取meta标签content属性报错求解

问题根因
  • 全局调用$('[itemprop="name"]').attr('content')会匹配页面所有带该属性的标签,无法和单条观看记录一一对应,会出现取值错位
  • 原有逻辑仅提取了标题h3和日期span两类元素,脱离单条记录的父容器选择meta标签,很容易出现元素匹配失败、attr方法返回空值的问题
可运行修改方案

调整遍历逻辑,直接定位每条观看记录的父容器,在容器上下文内分别提取三个目标字段,避免元素配对错位,修改后完整代码如下:

/**
* Returns Trakt watchlist by username
* @param pages enter the number of pages in the list. Default is 10
* @customfunction
*/
function TRAKT(pages=10) {
    const username = `jerrylaslow`
    const maxPage = pages; 
    const reqs = [...Array(maxPage)].map((_, i) => ({ url: `https://trakt.tv/users/`+ username +`/history/all/added?page=${i + 1}`, muteHttpExceptions: true }));
    return UrlFetchApp.fetchAll(reqs).flatMap((r, i) => {
      if (r.getResponseCode() != 200) {
        return [["Values couldn't be retrieved.", reqs[i].url]];
      }
      const $ = Cheerio.load(r.getContentText());
      const result = [];
      // 遍历所有观看记录条目容器
      $('div.grid-item').each(function() {
        // 提取格式化观看日期
        const rawDate = $(this).find('h4 > span.format-date').text().trim().replace(/T|Z/g, " ");
        const watchDate = Utilities.formatDate(new Date(rawDate), "GMT", "yyyy-MM-dd");
        // 提取页面显示的标题文本
        const displayTitle = $(this).find('a.titles-link > h3.ellipsify').text().trim();
        // 提取目标meta标签的content属性值
        const metaTitle = $(this).find('meta[itemprop="name"]').attr('content') || "";
        result.push([watchDate, displayTitle, metaTitle]);
      });
      return result;
    });
}
效果说明
  • 脚本返回结果共三列:第一列为观看日期、第二列为页面显示的标题文本、第三列为你需要的meta标签content值(格式为片名 (年份)),和IMPORTXML公式提取结果完全一致
  • 去掉了原有splice拼接元素的逻辑,从根源避免不同字段错位的问题
  • 给meta字段取值加了空值兜底,个别条目缺失对应标签时不会触发脚本报错

内容的提问来源于stack exchange,提问作者tomf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:36:51