使用Google Apps脚本抓取数据

时间:2018-11-01 10:29:54

标签: google-apps-script web-scraping html-parsing scrape gas

我是GAS的新手,我正在尝试取消https://finance.yahoo.com/quote/BTCUSD%3DX?p=BTCUSD%3DX上提供的汇率。看起来像这样。 enter image description here

当我使用函数importxml时,“ = importxml(” https://finance.yahoo.com/quote/BTCUSD%3DX?p=BTCUSD%3DX“,” // * [@ id ='quote-header-info'] / div [3] / div / div“)” ,这让我发现我要找的东西是空的。

然后我根据Not able to scrape data这里的问题来使用解析器。

function test() {
  var url = "https://finance.yahoo.com/quote/BTCUSD%3DX?p=BTCUSD%3DX";
  var fromText = '<div class="D(ib) Mend(20px)" data-reactid="34">';
  var toText = '<span data-reactid="38">';
  var content = UrlFetchApp.fetch(url).getContentText();
  var scraped = Parser.data(content).from(fromText).to(toText).build();
  var root = XmlService.parse(scraped).getRootElement();
  var headerTr = root.getChild("thead").getChildren();
  var res = headerTr.map(function(e) {return e.getChildren().map(function(f) {return f.getValue()})});
  var len = res[0].length;
  // Retrieve values
  var valuesTr = root.getChild("tbody").getChildren();
  var values = valuesTr.map(function(e) {return e.getChildren().map(function(f) {return f.getValue()})})
  .map(function(e) {return e.length == len ? e : e.concat(Array.apply(null, new Array(len - e.length)).map(String.prototype.valueOf,""))});
  Array.prototype.push.apply(res, values);
  var ss = SpreadsheetApp.getActiveSheet();
  ss.getRange(2, 18, res.length, res[0].length).setValues(res);
}

然后我被警告说“序言中不允许出现第1行错误。”,我对此不太了解。

非常感谢任何指导。

0 个答案:

没有答案