rcmdnk's blog

詳解! Google Apps Script完全入門 [第3版]

Google Apps Scriptで使えるHTMLを解析しようとしたときに調べた ライブラリなどについて。

cheeriojs

  • Script ID: 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0

Node.jsでjQueryのようにHTMLを扱える cheerio をGoogle Apps Scriptで使えるようにしたもの。

1
2
3
4
5
6
7
8
9
function testCheerio() {
  const html = UrlFetchApp.fetch("https://example.com").getContentText();
  const $ = Cheerio.load(html);
  Logger.log($('body').text());
  Logger.log($('h1').text());
  $('p').each(function(i, elm) {
    Logger.log($(this).text());
  });
}

こんな感じで使えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


    Example Domain
    This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.
    More information...

    Example Domain
    This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.
    More information...
---
  Example Domain
---
  This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.
---
  More information...

もとのcheerioの方も含めてドキュメントが余りない感じですが、 jQueryっぽく使えるという前提と、コード自体は公開されているので後は頑張って見ればどのように使えるか分かります。

上のeachのループとかは下のSlack Overflowに例がありました。

node.js - CheerioJS, looping through <ul> with same class name - Stack Overflow

jQueryっぽく使えるということで、HTMLの解析としては一通り何でもできそうで十分な感じがします。

Parser

  • Script ID: 1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

Parserは日本語でGASでスクレイピング、的なことを検索するとよく出てくるんですが、 もとのコードは見つけられません。 そもそもこのIDの出どころが結局よくわからなかい。。。

おそらくGitHubなどには後悔しない状態でライブラリとしてGASで公開しているだけなので コードは見えない状態なのかとおもいますが、 使い方も基本的に誰かが使ってるのを見て知るしかない状態です。

1
2
3
4
5
6
7
8
9
function testParser() {
  const html = UrlFetchApp.fetch("https://example.com").getContentText();
  const data = Parser.data(html);
  Logger.log(data.from('<body>').to('</body>').build());
  Logger.log(data.from('<h1>').to('</h1>').build());
  data.from('<p>').to('</p>').iterate().forEach(function(x){
    Logger.log(x);
  });
}

似たようなことをやろうとするとこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
---
Example Domain
---
This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.
---
<a href="https://www.iana.org/domains/example">More information...</a>

ただし、Parserの方はあくまでfromも文字列からtoの文字列までを切り取る、 といったことをするだけっぽいので、テキストだけを抜き出したい場合にはさらに手を加える必要がある部分も出てきます。

まとめ

Google Apps ScriptでHTMLを解析したい場合は cheeriogsが便利です。

一方で、Google Apps Scriptはスクリプトをライブラリとして簡単に共有して IDだけ知っていれば使えるという点があるのですが、 中で何をしているのかわからないと使い方がわからない上に情報を抜き出されたり危険なこともあります。

Parserはおそらく問題は無くてもうちょっと真面目に探せば出てくるのかと思いますが結局 もとに辿り着けなかったんですが誰か知っていたら教えてください。

Sponsored Links
Sponsored Links

« ChatGPTに自分のメモたちを読んでもらって質問に答えてもらう SlackでChatGPTによるWebページの要約を頼むコマンドをGoogle Apps Scriptで作る »

}