95837


[スクレイピング用ライブラリの使い方](https://so.sha-box.com/2022/08/gas-cheerio/)

上記サイトからCheerioライブラリを使用して、ログにホームページのHTML情報を出力したいのですが、うまくいきません

下記のコードは何が間違っているのでしょうか？

[code]

    function textAndAddClass() {
    
        var spreadsheet = SpreadsheetApp.getActive();
        var sheetURL  =  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('URL貼り付け'), true);
    
        for(i=1; i<=10; i++){
            let URL = sheetURL.getRange('A' + i).getValue();
            const $ = cheerio.load(body)
            console.log($);
        }
    }
    
[/code]


CC BY-SA 4.0
2023-08-01T04:03:45.790
95817
2023-08-03T08:17:28.730
2023-08-03T08:17:28.730
3060
58928
question
javascript google-apps-script web-scraping google-spreadsheet
セルに貼り付けたURLのHTMLをログに展開したい


おそらくエラーメッセージが出力されているはずで、そこに原因も書いてあることと思います。質問のコードを見るかぎりですと、以下のような原因が考えられます。

  * `body` という変数の定義が見当たらない
  * そもそも HTML を取得するコードが無い
  * `cheerio` は大文字で始まる `Cheerio` である可能性  
（これはライブラリの導入時の設定によります。Apps Script のデフォルトでは大文字始まりになっているようです）

以下は、これらを修正した例です（手元で動作確認できるようにシートの取得部分なども変更しています）。

[code]

    function test() {
      let spreadsheet = SpreadsheetApp.getActive();
      let sheetURL = spreadsheet.setActiveSheet(spreadsheet.getActiveSheet(), true);
    
      for (i = 1; i <= 10; i++) {
        try {
          let URL = sheetURL.getRange('A' + i).getValue();
          console.log("URL: ", URL);
    
          let response = UrlFetchApp.fetch(URL);
          console.log("レスポンスコード", response.getResponseCode());
    
          let content = response.getContentText("utf-8");
          console.log("内容の長さ:", content.length);
    
          const $ = Cheerio.load(content);
          console.log("タイトル:", $("title").text());
    
          // for ループでなく、each メソッドを使用してもよいです
          for (let elm of $("h1")) {
            console.log("見出し:", $("h1").text());
          }
    
        } catch (err) {
          console.error("取得に失敗しました:", err);
          continue;
        }
      }
    }
    
[/code]


CC BY-SA 4.0
2023-08-03T07:42:56.110
95837
2023-08-03T07:42:56.110
3054
95817
answer