cdcをGASでスクレイピング、スプレッドシートに保存

www.cdc.gov

スクレイピング

  • 3/1 合計、死亡者の欄が追加されたので変更
  • 3/3 また表示方法が変更されてtotal項目がなくなった(-_-;)
  • 3/4 陽性のみになった
function myFunction() {
  
  // スクレイピング

  var html = UrlFetchApp.fetch('https://www.cdc.gov/coronavirus/2019-ncov/cases-in-us.html').getContentText();

  var today = new Date();

  // Logger.log(today);
  
  var updated = Parser.data(html).from('<span class="text-red">').to('</span>').build().replace('Updated ', '');

  // Logger.log(updated);
  
  var table1 = Parser.data(html).from('<table class="table table-bordered nein-scroll">').to('</table>').build();
  var tbody1 = Parser.data(table1).from('<tbody>').to('</tbody>').build();
  var data1 = Parser.data(tbody1).from('<td>').to('</td>').iterate();

  // Logger.log(data1);
  
  var table2 = Parser.data(html).from('<table class="table table-bordered">').to('</table>').build();
  var tbody2 = Parser.data(table2).from('<tbody>').to('</tbody>').build();
  var data2 = Parser.data(tbody2).from('<td>').to('</td>').iterate();

  // Logger.log(data2);
  
  var tcases = Parser.data(html).from('Total cases:').to('</li>').build().trim();
  var deaths = Parser.data(html).from('Total deaths:').to('</li>').build().trim();
  var states = Parser.data(html).from('States reporting cases:').to('</li>').build().trim();
  
  // 結果を保存
  
  var result = [];
  
  result.push(today);
  result.push(updated);
  result.push(data1[1], data1[3], data1[5], data1[7]);
  result.push(deaths, states);
  
  result.push([data2[1], data2[3]]);
  
  Logger.log(result);

  // スプレッドシートに書き込み
  
  var spreadsheet = SpreadsheetApp.getActive();
  
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('log'), true);

  spreadsheet.appendRow(result.flat()); 
}

テスト中

毎日 7~8時頃更新

https://docs.google.com/spreadsheets/d/e/2PACX-1vRxhEVtq8kekvypdfkrj4XFX-9X8MgOLqc4jkaQTMlOVoWFFFMxQoO6SvkEXgi4xCvznMZjmpPspz3o/pub?gid=0&single=true&output=csv