last update 2020年3月28日 0:55

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; }

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

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

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

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

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

コメントを記入