使用脚本将网络数据导入到Google工作表中

问题描述 投票:1回答:1

我当时使用ImportXML抓取日期,但是自从得知ImportXML有一个上限之后,我就改用编写自己的脚本了。目前,我拼凑的脚本“加载”了一个完全空的单元格,如此处Test Sheet所示,该脚本粘贴在下面。我不是非常有经验的脚本编写人员,并且在确定我做错事情时遇到问题,我们将不胜感激。

function IDATE(id) 
{
  const url = "https://www.buyma.com/item/" + id;
  var response = UrlFetchApp.fetch(url);
  const s = response.getContentText();

  var match = /[@id='s_yukodate']/.exec(s);
  if (match != null) 
  {
    date = match[1];
  }

  return [date];
}
google-apps-script google-sheets
1个回答
0
投票

尝试一下。

首先,以以下格式设置工作表以使脚本起作用-

before

然后,在脚本编辑器中使用以下代码-

function getData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = ss.getDataRange().getValues();
  var header = values[0];
  var idIndex = header.indexOf('ID');
  var dateIndex = header.indexOf('Date');
  for (var i = 1; i < values.length; i++) {
    var id = values[i][idIndex];
    var date = IDATE(id);
    ss.getRange(i+1, dateIndex+1).setValue(date);
  }
}

function IDATE(id) {
  const url = "https://www.buyma.com/item/" + id;
  Logger.log(url);
  var response = UrlFetchApp.fetch(url);
  const s = response.getContentText();
  var match = /s_yukodate[\s\S]*?<dd>(\d\d\d\d\/\d\d\/\d\d).*<\/dd>/.exec(s);
  if (match != null) {
    var date = match[1];
    return date;
  }
}

您将因此看到类似以下的输出-

after

显然,此脚本在很大程度上取决于所使用的正则表达式-

s_yukodate[\s\S]*?<dd>(\d\d\d\d\/\d\d\/\d\d).*<\/dd>

请随时根据需要进行修改。希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.