首页 > 解决方案 > 如何编写 Google Apps 脚本以使用 UrlFetchApp 提取 FinViz.com 中的部分表格数据?

问题描述

我喜欢学习如何编写一个 Google Apps 脚本,将 FinViz.com 中的部分表格数据导入 Google 表格,但使用 UrlFetchApp。我曾经使用 IMPORTHTML。如果只搜索几个股票贴纸,它就会运作良好。但是,如果我为许多股票贴纸循环该函数,尽管 FinViz 中提供了此类数据,但我仍面临大量空导入。我从谷歌搜索中看到 UrlFetchApp 是要走的路。任何人都可以帮助使用 UrlFetchApp 编写脚本吗?举个简单的例子,我在 Google 工作表的 A 列中有一个股票代码列表,并从 FinViz 导入它们的远期市盈率数据,然后将它们写入工作表的 B 列。我在这里分享一张谷歌表格。太感谢了!!

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

标签: google-apps-scripturlfetch

解决方案


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

以下带有不言自明注释的代码返回并记录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()以返回编码为字符串的 HTTP 响应。
  • Javascript 搜索,它返回正则表达式和给定字符串之间第一个匹配项的索引索引,如果没有找到匹配项,则返回 -1。
  • Javascript 子字符串,它返回一个新字符串,其中包含给定字符串的指定部分,从第一个索引开始,到第二个索引结束。

推荐阅读