如何使用 UrlFetchApp 编写 Google Apps 脚本来提取 FinViz.com 中的一部分 table 数据?

How to write a Google Apps Script to pull a part of table data in FinViz.com with UrlFetchApp?

我想学习如何编写 Google Apps 脚本以将 FinViz.com 中的部分 table 数据导入 Google sheet ,但使用 UrlFetchApp。我曾经使用 IMPORTHTML。如果只搜索几次股票标签,它就会运作良好。但是,如果我为许多股票贴纸循环该功能,尽管 FinViz 中提供了此类数据,但我仍面临大量空导入。我从谷歌搜索中看到 UrlFetchApp 是可行的方法。任何人都可以使用 UrlFetchApp 帮助编写脚本吗?举个简单的例子,我在 Google sheet 的 A 列中有一个股票代码列表,并从 FinViz 导入它们的 Forward P/E 数据,然后将它们写在 [=24] 的 B 列中=].我在这里分享一个Google sheet。非常感谢!!

https://docs.google.com/spreadsheets/d/1JmdBKqNVoj2wpJ_st22C8FchgTUss8Edo4q_gMmAgKE/edit?usp=sharing

在对您提供的站点进行了一些测试并尝试了不同的方法后,我认为您可以更轻松地检索 HTML 静态站点文本,然后在 Javascript 上进行搜索网站 return 您要查找的值。我分享的答案中的代码失败了,因为该网站存在一些 HTML 兼容性问题,因为您试图用 XML 来解释该数据。此外,您感兴趣的 table 位于 div 元素内,因此您需要先访问 div 元素,然后再访问 table.

以下代码带有不言自明的注释 returns 并记录来自您提供的网站的 Forward P/E 值:

function ALTERNATIVE(){
  // Get all the static HTML text of the website
  const res = UrlFetchApp.fetch('https://finviz.com/quote.ashx?t=AAPL', {muteHttpExceptions: true}).getContentText();
  // Find the index of the string of the parameter we are searching for 
  index = res.search("Forward P/E");
  // create a substring to only get the right number values ignoring all the HTML tags and classes
  sub = res.substring(index+68,index+73);

  Logger.log(sub);
  return sub;
}

参考资料

  • UrlFetchApp.fetch()获取HTTP响应数据。
  • getContentText() 到 return 编码为字符串的 HTTP 响应。
  • Javascript search 其中 return 是正则表达式与给定字符串之间第一个匹配项的索引索引,如果未找到匹配项,则为 -1。
  • Javascript substring 其中 return 是一个新字符串,包含给定字符串的指定部分,从第一个索引开始到第二个索引结束。