GASで正規表現を使ってスクレイピングするメモ

 last update 2020年3月28日

Google App Script の正規表現を使ってWEBサイトをスクレイピングする方法のメモです。

検索して出てきたコードが意外と動かくなくて微ハマりしたのもので。

いきなりの結論になりますが、あるURLの title タグの内容を抽出するGASのコードは以下のとおり。

try {
  var url = "https://www.example.com/";
  var response = UrlFetchApp.fetch(url).getContentText("UTF-8");
  
  var regex = new RegExp('<title>(.*?)</title>', 'im');
    
  var matched = response.match(regex);
  Logger.log(matched[0]);  // マッチした全体
  Logger.log(matched[1]);  // 正規表現のカッコ内部分の抽出

} catch (e) {
  Logger.log(e);
  return e;
}Code language: JavaScript (javascript)

マッチしなかった場合は、変数「matched」が null になりますので、判定処理が必要であれば追加してください。

ちちなみにハマったポイントは、正規表現の表現方法。

new RegExp() しなくても動かす方法はありますが、以下の書き方の場合、パターンを文字列として渡さないようにする必要がある他、また、「/」を適切にエスケープしないと動作しません。

var regex = '/<title>(.*?)</title>/';  // マッチしない
var regex = /<title>(.*?)</title>/im;  // "/title"部分で構文エラー
var regex = /<title>(.*?)<\/title>/im;  // これは動くCode language: PHP (php)

慣れていればこの辺りで苦労することは無いと思いますが、すっかり Perl が頭から抜けた身には、new RegExp() を使った方が分かりやすいと思いました。

Hatena Pocket Line

コメントを記入