JavaScript
GoogleAppsScript

Google Apps ScriptでHTMLテキストからDOMオブジェクトを生成したいが無理だった

javascriptでよく使う次のようなDOMアクセス。

var x = document.getElementsByClassName("example");

GASのUrlfetchで得たContentからDOMオブジェクトを生成して同じように操作がしたい。

XmlService.parseでやってみる

RSSなどのXML文字列ならXmlService.parseを使って対処できるが、HTMLではXML構文にマッチしないのでエラーが出まくる。
ならばと、なんとかHTMLからXML構造に持っていこうとしたが、

  var r = UrlFetchApp.fetch("https://www.example.com");
  var text = r.getContentText()
  text = text.replace(/<link [\s\S]*?>/g,"");
  text = text.replace(/<meta [\s\S]*?>/g,"");
  text = text.replace(/<img [\s\S]*?>/g,"");
  text = text.replace(/<input [\s\S]*?>/g,"");
  text = text.replace(/<!--[\s\S]*?-->/g,"");
  text = text.replace(/ async/g,"");
  text = text.replace(/ selected/g,"");

  text = text.replace(/&url;/g,"");
  text = text.replace(/&raquo;/g,"");
  text = text.replace(/&nbsp;/g,"");

キリがないよ...

documentクラスでやってみる

テキストのHTMLをDOMに変換する方法として、ググるとよく出てくるのが、空のDIVオブジェクトを作ってそのinnerHTMLを更新する方法。

  var div = document.createElement('div');
  div.innerHTML = contentText;

うん、でも、サーバーサイドのjavascriptだから動かないね。

DOMを諦めて正規表現で対象となる部分を抽出

  var r = UrlFetchApp.fetch("https://www.example.jp");
  var text = r.getContentText()
  var res = text.match(/<li class="hogehoge">[\s\S]*?<\/li>/g);

でも汎用性ないねぇ。。。誰かいい方法を知りませんか。