解析雅虎财经数据

问题描述 投票:0回答:1

首先要做的事情......我真的试图自学有关谷歌应用程序脚本和粒子正则表达式的语法,但不知何故我不明白。

我正在尝试从雅虎财经检索特定股票的数据,然后解析电子表格的收益日期等信息。

我可以检索数据并查看调试器中的值,但无法提取数据。例如,百时美施贵宝 (Bristol-Myers) 2024 年 2 月 2 日的盈利数据。

这是代码片段:

const url = `https://finance.yahoo.com/quote/BMY?p=BMY&.tsrc=fin-srch`;
 const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
 const contentText = res.getContentText();


  //var body_start = contentText.indexOf('<div id="Main"');
  var body_start = contentText.indexOf('<td class="C($primaryColor) W(51%)"><span>Earnings Date</span></td>');
  var body_end = contentText.lastIndexOf("</span></td>");
  var body_data = contentText.slice(body_start, body_end);
 console.log(body_data); 
 //const date = contentText.match(/<td(?:.*?)data-test="MARKET_CAP-value">(\d{3}.\d{3} [A-Z]{1});  

我试图获取至少前三个字母......所以“二月”与此代码部分:

var date = body_data.match(/<td(?:.*?)data-test="EARNINGS_DATE-value"><span>([A-Za-z]{3})<\/td>/);

如何更改上面的代码以获得保存在变量“date”中的完整日期?

提前非常感谢您!

我尝试隔离问题,并尝试逐步获取完整日期,但没有成功。

google-apps-script yahoo-finance
1个回答
1
投票

我尝试使用XmlService来解析页面,但它包含太多无法解析的垃圾。请参阅这篇文章元素文本中带有“&”的 XML 解析问题

所以我决定查看您提取的一小部分 html,并注意到日期包含在以下行/单元格中。

<td class="Ta(end) Fw(600) Lh(14px)" data-test="EARNINGS_DATE-value">
  <span>Feb 02, 2024</span>
</td>

从那里我编写了一个小函数来获取日期。

代码.gs

function test() {
  try {
    let url = "https://finance.yahoo.com/quote/BMY?p=BMY&.tsrc=fin-srch";
    let res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
    let text = res.getContentText();
    let start = text.indexOf("EARNINGS_DATE-value");
    if( start < 0 ) throw " Date not found";
    // get date
    start = text.indexOf("<span>",start);
    if( start < 0 ) throw " Date not found";
    let end = text.indexOf("</span>",start);
    let date = text.substring(start+6,end);
    console.log(date);
  }
  catch(err) {
    console.log("Error in test: "+err)
  }
}

执行日志

10:09:36 AM Notice  Execution started
10:09:38 AM Info    Feb 02, 2024
10:09:37 AM Notice  Execution completed

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.