Google表格-如何从此网站获取货币信息

时间:2019-07-18 07:52:30

标签: google-apps-script google-sheets

im tryng将来自该网站的货币信息带到我的Google表格:

https://www.bbva.mx/personas/informacion-financiera-al-dia.html

我正在尝试使用IMPORTHTML和IMPORTXML,但是这些都不对我有用

我需要的信息是这个

Information needed

对此有任何帮助吗?

也许使用Apps脚本?


编辑: 这是我正在使用的代码

function fetchData() {
  var url = 'https://www.bbva.mx/personas/informacion-financiera-al-dia.html';
  var dolarTable = UrlFetchApp.fetch(url).getContentText();
  Logger.log(dolarTable)
  var match = dolarTable.match(/Dólar(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(<\/tr>)/);
  var string = match[0].replace(/(\r\n|\n|\r)/gm," ");
  string = string.replace(/\s/g, "");
  var dollar = string.search("\\$");
  var value = string.indexOf("$", dollar + 1);   
  var substrings = string.substring(value);

  var almostThere = substrings.substring(0).indexOf("<");
  var number = substrings.substring(0, almostThere);

  return SpreadsheetApp.getActiveSpreadsheet().getSheets[0].getRange('A1').setValue(number);
}

得到这个错误 enter image description here

1 个答案:

答案 0 :(得分:0)

好的,所以您遇到的问题是,在Sheets中,IMPORTHTML和IMPORTXML Imports data from a table or list within an HTML page中,您尝试访问的网页正在使用活动服务器脚本来生成HTML内容。

在Apps脚本中,有一个内置UrlFetchApp class,您可以使用它来获取HTML数据-it has its own limitations,但可以将页面中的数据获取到脚本中以供使用。< / p>

您要获取的页面使用包含.aspx文件的框架,而正是此生成的内容包含了您要检索的信息。坦白地说,此解决方案是临时的,因为我使用UrlFetchApp.fetch()来获取数据,然后使用正则表达式和内置的JavaScript字符串函数来尽可能通用地获取信息:

function fetchData() {
  var dolarTable = UrlFetchApp.fetch('https://bbv.infosel.com/bancomerindicators/indexv8.aspx').getContentText();
  var match = dolarTable.match(/Dólar(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(<\/tr>)/);
  var string = match[0].replace(/(\r\n|\n|\r)/gm," ");
  string = string.replace(/\s/g, "");
  var dollar = string.search("\\$");
  var value = string.indexOf("$", dollar + 1);   
  var substrings = string.substring(value);

  var almostThere = substrings.substring(0).indexOf("<");
  var number = substrings.substring(0, almostThere);

  SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getRange('A1').setValue(number);
}

这将获取页面的HTML数据,然后通过子字符串过滤减少所需的内容。我一直保持通用,只要页面的结构变化不大,即使金额的值发生变化,它也仍然可以正常工作。