google-apps-script - 如何编写 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
解决方案
在对您提供的站点进行了一些测试并尝试了不同的方法之后,我认为您可以更轻松地检索 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 子字符串,它返回一个新字符串,其中包含给定字符串的指定部分,从第一个索引开始,到第二个索引结束。
推荐阅读
- c++ - 有没有一种优雅的方法来处理运行时依赖的对象组合而不使用 dynamic_cast?
- python - 无法将 reportlab 导入空闲
- windows - C:WINDOWSsystem32configsystemprofileAppDataLocalJenkins.jenkinstoolshudson.tasks.Maven_MavenInstallationmaven/bin/mvn:没有这样的文件或目录
- vba - 计算相同值之间有多少个单元格
- visual-studio-code - 保存格式文件上的格式更漂亮,但未保存更改
- nginx - TypeError: 'module' 对象在使用 Flask-SocketIO、uWSGI+gevent 和 Nginx 时不可调用。谁能帮我摆脱困境?
- c++ - 在getline之后在C ++中浏览一行内的单词
- php - return $pdf->stream 不加载徽标 - DomPDF Laravel
- sql - 选择和内连接返回重复项
- javascript - 如何返回对函数的引用而不是返回值