Skip to content
るいラボ
原神ツール

GAS×webスクレイピング - 苦戦した点

Development Notes1 min read

特定のサイトから,ワンポチで簡単に情報を収集したかったので,GASを使ってWebスクレイピングをするプログラムを書いた.
その時に書いてて苦戦した部分のメモ.

参考サイト
【Parser】GASでHTML解析する方法
GASでスクレイピングする方法

参考サイトの通りにやってて,詰まったのは

  • Parserでエラー
  • URLが404でエラー
  • Parserが機能しない時がある

Parserでエラー

エラー文
1TypeError: Cannot read property 'indexOf' of undefined
2Parser_.build @ Parser.gs:69

エラーの中身
Parserで指定しているfromの中身の,検索用の文字列を見つけられなかった.

対策

if文で場合分け

URLが404でエラー

URLが404で返ってくると,UrlFetchApp.fetchで処理が止まるエラー

対策(例)

1var name = [];
2const options = {
3 "muteHttpExceptions": true,  // 404エラーでも処理を継続する
4};
5for (let i=0; i<xxx.length; i++) {
6 Utilities.sleep(5000);
7 const url = "https://xxx/"+ xxx[i][0] +"/";
8 const html = UrlFetchApp.fetch(charaUrl,options);
9 if (charaHtml.getResponseCode() == 200) {
10 name[i] = Parser.data(html.getContentText("UTF-8"))
11 .from('<xxx>').to('</xxx>').build();
12 }else {
13 name[i] = "";
14 }
15}

参考サイト
GASでのWebスクレイピングについて雑多に書いてみた
Handle 404 errors in UrlFetchApp.fetch()(英語)

Parserが機能しない時がある

よく分かってないエラー

Parserで切り取ってるのに,切り取れてないことがある.

エラー?の中身
Parserでいらない文字列を排除する過程で,HTMLの「”」(ダブルクォーテーション)が無くなることがある.無くならないこともある.

対策

  1. デバックでParserした文を確認する
  2. 意図した場所で切り取りが出来ているか確認する
  3. from と to の検索語に「”」を入れたり抜いたりする

もっと効率的な対策があるかもしれない.

Development Notes