首先要做的事情......我真的试图自学有关谷歌应用程序脚本和粒子正则表达式的语法,但不知何故我不明白。
我正在尝试从雅虎财经检索特定股票的数据,然后解析电子表格的收益日期等信息。
我可以检索数据并查看调试器中的值,但无法提取数据。例如,百时美施贵宝 (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”中的完整日期?
提前非常感谢您!
我尝试隔离问题,并尝试逐步获取完整日期,但没有成功。
我尝试使用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
参考文献