【问题标题】:how to map different classes within the same string using Google App Script and Cheerio?如何使用 Google App Script 和 Cheerio 在同一字符串中映射不同的类?
【发布时间】:2021-08-12 16:55:41
【问题描述】:

Google App Script 中用于 Cheerio 的库:

1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0



我想收集大家的文字<td class="name large-link">和存在于字符串中的<td class="name large-link">,我尝试将其映射如下:

function TestOne() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Test One');
  var url = sheet.getRange('Test One!A1').getValue();
  
  const contentText = UrlFetchApp.fetch(url).getContentText();
  const $ = Cheerio.load(contentText);

  //Menu do Plantel
  $('#page_team_1_block_team_squad_7-table > tbody > tr > td')
  .each((index, element) => {
  sheet.getRange(index+2,2).setValue($(element.shirtnumber).text());
  sheet.getRange(index+2,3).setValue($(element.name.large-link).text());
  });
}

注意:我想获取表格中存在的所有class的文本,但是由于它太大了,我将其总结为两个class,以便我可以理解我需要做什么和其余的稍后添加。

但是我没有成功返回,我找不到如何制作这个集合的示例,我想要一个指示,这样我就不需要做几个不同的循环并将它们全部合并为一个。

想法是在我的电子表格中重新创建此表:

这里是站点地图:

https://int.soccerway.com/teams/norway/fotballklub-bodoglimt/1595/squad/

【问题讨论】:

    标签: google-apps-script google-sheets cheerio


    【解决方案1】:

    最实用的选项是不带脚本,你可以使用谷歌表格的'importHTML'功能

    文档:https://support.google.com/docs/answer/3093339?hl=en

    【讨论】:

    • 朋友您好,我使用此选项并使用IMPORTXML 收集了其他数据,但不幸的是它加入了许多呼叫并达到了谷歌限制,导致电子表格卡住等待加载数据。所以我需要使用 Google App Script 来做和以前一样的服务。
    【解决方案2】:

    它对我有用,我得到了example 并做了一些修改

       function myFunction() {
      const url = 'https://int.soccerway.com/teams/norway/fotballklub-bodoglimt/1595/squad/';
      const ss = SpreadsheetApp.getActive()
      const sh = ss.getSheetByName('Test One');
      const contentText = UrlFetchApp.fetch(url).getContentText();
      const $ = Cheerio.load(contentText);
    
      var header = Array();
    
      $("table tr th").each(function (i, v) {
        header[i] = $(this).text();
      })
    
      var data = Array();
    
      $("table tr").each(function (i, v) {
        data[i] = Array();
        $(this).children('td').each(function (ii, vv) {
          data[i][ii] = $(this).text();
        });
      })
    
    
    
      for (let i = 1; i < data.length - 6; i++) {
        console.log(data[i].length);
        console.log(data[i]);
        sh.getRange(i, 1, 1, data[i].length).setValues([data[i]]);
      }
    }
    

    【讨论】:

    • 我现在不在家,一到我就会检查并返回解决问题的可能答案验证,非常感谢您抽出宝贵时间帮帮我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2021-12-04
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多