【问题标题】:IMPORTHTML Could not fetch URLIMPORTHTML 无法获取 URL
【发布时间】:2021-08-26 06:19:33
【问题描述】:

我正在尝试将 yahoo 财务统计信息提取到 Google 表格中。使用了这个函数,但出现错误无法获取 url..

=IMPORTHTML("https://finance.yahoo.com/quote/AAPL/key-statistics?p=AAPL","TABLE",3)

知道我哪里错了吗?基本上我想将利润率、营业利润率等检索到特定股票的单独列中

谢谢

【问题讨论】:

标签: html google-sheets import


【解决方案1】:

您不能使用 IMPORTXML 或 IMPORTHTML 函数,因为该页面是由 javascript 在客户端而不是服务器端构建的。但是,所有数据都在一个大 json 中可用,您可以使用:

  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)

然后您可以浏览信息并选择您需要的信息。要从 json 中获取所有数据,请使用:

//mike steelson
let resultat = []; 
function getDataFromYahoo(url) {
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  getAllData(1,eval(data),'data')
  return resultat
}
function getAllData(niv,obj,id) {
  const regex = new RegExp('[^0-9]+');
  for (let p in obj) {
    var newid = (regex.test(p)) ? id + '.' + p : id + '[' + p + ']';
    if (obj[p]!=null){
      if (typeof obj[p] != 'object' && typeof obj[p] != 'function'){
        resultat.push([niv, newid, obj[p]]);
      }
      if (typeof obj[p] == 'object') {
        if (obj[p].length){
          resultat.push([niv, newid, '']);
        }else{
          resultat.push([niv, newid, '']);
        }
        niv+=1;
        getAllData(niv, obj[p], newid );
        niv-=1
      }
    }
  }
}  

https://docs.google.com/spreadsheets/d/1EKu4MbuwZ6OTWKvyIJrMfnXf7gXfU8TWU3jwV4XEztU/copy

【讨论】:

  • 谢谢迈克;但我不认识 Json;基本上我想将统计信息按列提取到一组股票的表格中
  • 我可以通过我提到的电子表格做的是从网页中提取所有信息(> 15,000)......但现在检测您需要的信息是一项艰巨的工作,我不'除非您尝试在“大海捞针”中找到它们,否则没有神奇的方法可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2016-12-26
相关资源
最近更新 更多