繁体   English   中英

在 Apps Script 和 Google Sheets 中使用 ImportHTML 进行数据抓取

[英]Data Scraping With ImportHTML in Apps Script & Google Sheets

目标:我正在尝试从网站中提取数据并使用它来创建一个大表。 我可以说我非常接近让它发挥作用,但我已经遇到了障碍。

背景:我有一个三页的谷歌表。 (1) 标题为“tickers”的是标普 500 中每个股票代码的列表,位于 A1-A500 行。 (2) Titled actionField 只是脚本中使用的空白页。 (3) 有标题的 resultField 将保存结果。 我从中提取的网站是 ( http://www.reuters.com/finance/stocks/companyOfficers?symbol=V ) 不过,我希望脚本能够(稍作修改)处理通过 importHtml 访问的任何数据。

脚本:我目前拥有的脚本如下:

function populateData() {
var googleSheet = SpreadsheetApp.getActive();

// Reading Section

var sheet = googleSheet.getSheetByName('tickers');

var tickerArray = sheet.getDataRange().getValues();
var arrayLength = tickerArray.length;
var blankSyntaxA = 'ImportHtml("http://www.reuters.com/finance/stocks/companyOfficers?symbol=';
var blankSyntaxB = '", "table", 1)';

// Writing Section

for (var i = 0; i < arrayLength; i++)
  {
     var sheet = googleSheet.getSheetByName('actionField'); 
     var liveSyntax = blankSyntaxA+tickerArray[i][0]+blankSyntaxB;
     sheet.getRange('A1').setFormula(liveSyntax);
     Utilities.sleep(5000);
     var importedData = sheet.getDataRange().getValues();
     var sheet = googleSheet.getSheetByName('resultField'); 
     sheet.appendRow(importedData)
  }  
}

这成功地从股票代码页面抓取了股票代码。 调用 importHtml。 复制数据。 并将某些内容附加到右侧页面。 它循环并为股票列表中的每个项目执行此操作。

但是,附加的数据如下:

[Ljava.lang.Object;@42782e7c
[Ljava.lang.Object;@2de9f184
[Ljava.lang.Object;@4b86a4d0

它显示在许多列中,对于与循环中的迭代一样多的行。

如何成功追加数据?

(以及有关改进此脚本的任何建议?)

appendRow 方法不适合这里。 因为它只附加一行,所以它的参数应该是一个一维数组。

您从getValues获得的通常是一个二维值数组,例如[[a,b], [c,d]] 即使只有一行, getValues也会返回[[a,b]] 唯一的例外是单单元格范围,您只能获得该单元格中的值。 永远不是一维数组。

如果只需要一行,请使用例如appendRow(importedData[0])

否则,插入所需数量的行并将值的二维数组分配给它们。

 var sheet = googleSheet.getSheetByName('resultField'); 
 var lastRow = sheet.getLastRow();
 sheet.insertRowsAfter(lastRow, importedData.length);
 sheet.getRange(lastRow + 1, 1, importedData.length, importedData[0].length)
      .setValues(importedData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM