2024年8月9日
GASで正規表現を使ってスクレイピングするメモ
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() を使った方が分かりやすいと思いました。