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

如何用Google Apps Script抓取Yahoo Finance的Price/Book (mrq)数据?

问题分析与解决方案

现有代码的问题

  1. 变量名非法:Price/Book中的/是JavaScript除法运算符,不能作为变量名,会直接触发语法错误,需改为合法标识符(如priceBookMatch)。
  2. 正则转义错误:UrlFetchApp获取的是原始HTML内容,标签使用</>而非转义后的&lt;/&gt;,正则里的转义字符会导致匹配失败。
  3. 正则匹配范围过宽:页面中存在大量fin-streamer标签,无差别匹配会抓取到无关数据,需结合目标指标的上下文缩小范围。
  4. 未处理匹配失败场景:如果match返回null,直接访问[1]会抛出运行时错误,必须先做判空处理。

修正后的代码

function yahooF() {
  const ticker = 'AAPL';
  const url = `https://finance.yahoo.com/quote/${ticker}/key-statistics/`;
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const contentText = res.getContentText();
  
  // 结合Price/Book (mrq)的上下文精准匹配数值
  const priceBookRegex = /Price\/Book \(mrq\)[\s\S]*?<fin-streamer[^>]*>([\d,.]+)<\/fin-streamer>/;
  const priceBookMatch = contentText.match(priceBookRegex);
  
  if (priceBookMatch && priceBookMatch[1]) {
    const cleanResult = priceBookMatch[1].replace(',', ''); // 移除千分位逗号
    console.log(cleanResult);
    return cleanResult;
  } else {
    console.log("未找到Price/Book数据");
    return "N/A";
  }
}

抓取页面其他数据的方法

方法1:精准正则匹配

针对每个目标指标(如市盈率、市销率),先在页面HTML中找到该指标的文本标识(比如Price/Sales (ttm)),然后修改正则中的指标关键词即可。示例:

  • 抓取「Price/Earnings (ttm)」的正则:/Price\/Earnings \(ttm\)[\s\S]*?<fin-streamer[^>]*>([\d,.]+)<\/fin-streamer>/

方法2:使用Cheerio解析HTML(更稳定)

通过Apps Script导入Cheerio库(库ID:1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0),用DOM选择器定位元素,避免正则维护的繁琐:

function yahooFWithCheerio() {
  const ticker = 'AAPL';
  const url = `https://finance.yahoo.com/quote/${ticker}/key-statistics/`;
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  const $ = Cheerio.load(res.getContentText());
  
  // 抓取Price/Book (mrq)
  const priceBook = $('span:contains("Price/Book (mrq)")').parent().next().find('fin-streamer').text();
  // 抓取Price/Earnings (ttm)示例
  const peRatio = $('span:contains("Price/Earnings (ttm)")').parent().next().find('fin-streamer').text();
  
  console.log(`Price/Book: ${priceBook}, PE Ratio: ${peRatio}`);
  return {priceBook, peRatio};
}

注意:使用前需在Apps Script编辑器中,通过「资源」→「库」添加上述库ID,并选择最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:39:57