如何在 Google Apps 脚本中使用 Cheerio 提取 HTML table 数据?

How to pull HTML table data with Cheerio in Google Apps Script?

受到 中 Cheerio 如此便利的启发,我尝试在以下代码中使用它。这些代码能够通过调用 class="snapshot-td2" 提取任何 table 数据,但我只想获取第一个 table 中的数据。我怎样才能做到这一点? URL 有两个 table 具有 class="snapshot-td2"。它以字符串形式检索它们。我怎样才能把它们排列成阵列?感谢您的帮助!

function test() {
  const url = 'https://finviz.com/quote.ashx?t=AFRM';
  const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true }).getContentText();
  const page = Cheerio.load(res);

  // The next line returned the tableValue from two tables of having class="snapshot-td2".
  // What should be modified to get the tableValue only from the first table? 
  // The next line returned the tableValue in string.  What should be modified to get them in array?
  var tableValue = page('.snapshot-td2').text();
  console.log(tableValue);
}

无论如何我都不是 jQuery 方面的专家,所以我的解决方案可能非常愚蠢。但它有效:

function test2() {
  const url = 'https://finviz.com/quote.ashx?t=AFRM';
  const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true }).getContentText();
  const $ = Cheerio.load(res);

  var data = $('table.snapshot-table2').find('td').toArray().map(x => $(x).text());

  var table = []
  for (var i=0; i<data.length; i+=12) {
    row = [];
    for (var j=0; j<12; j++) row.push(data[i+j]);
    table.push(row);
  }

  var range = SpreadsheetApp.getActiveSheet().getRange(1,1,table.length,table[0].length);
  range.setValues(table);
}

如果你想要一个数组(不是 table),data 就是数组。每个 [0,2,4...] 的偶数元素是一个名称,每个奇数元素 [1,3,5...] 是一个值。

您可以将其转换为 2 列 [[name, value], [name, value]...] 非常简单:

var table = [];
for (var i=0; i<data.length; i+=2) table.push(data[i], data[i+1]);

或进入一个对象{name:value, name:value, name:value...}:

var obj = {};
for (var i=0; i<data.length; i+=2) obj[data[i]] = data[i+1]);