タダケンのEnjoy Tech

楽しみながらラクに成果を上げる仕組みを考える

Google Apps ScriptでHTML・XMLのスクレイピングをするライブラリを公開してみた

f:id:tadaken3:20170627092403p:plain こんにちは!
タダケン(@tadaken3)です。

HTMLやXMLを整形・解析して、必要なデータを取り出すことををスクレイピングといいます。副業のお仕事関係で、Google Apps Scriptを使い、HTMLをスクレイピングする作業が必要になったのでいろいろ調べていたのですが、せっかくなのでHTML・XMLをスクレイピングするためのGoogle Apps Scriptのライブラリを作成してみました。

コードはこちらの記事を参考にさせていただきました。ありがとうございます。

HTML/XML Parser for Google Apps Scriptのご紹介

ライブラリの基本的な情報は以下のとおりです。

ライブラリ名:
HTML/XML Parser for Google Apps Script

GitHub:
https://github.com/tadaken3/html-parser-gas

スクリプトID:
1Jrnqmfa6dNvBTzIgTeilzdo6zk0aUUhcXwLlQEbtkhaRR-fi5eAf4tBJ

まず、スクリプトIDを使って、ライブラリを追加します。 Google Apps Scritpのメニューバーの「リソース>ライブラリ」と辿っていきます。

f:id:tadaken3:20170626232437p:plain

すると以下の画面が出てくるのスクリプトIDを入力してください。

f:id:tadaken3:20170626232501p:plain

これでライブラリが追加されました。

parserライブラリの使い方

ライブラリの使い方は簡単です。以下の3つのメソッドで要素を取得します。

  1. IDを指定するgetElementByIdメソッド
  2. クラス名を指定するgetElementByClassNameメソッド
  3. タグを指定するgetElementByTagNameメソッド

IDを指定するgetElementByIdメソッド

getElementByIdメソッドでは、ID名を指定して要素を取得します。

書き方

parser.getElementById(対象の要素,ID名)

実際のコードはこのようになります。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLById() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      title = parser.getElementById(xml, 'doc-title');
  Logger.log(title.getValue());
}

するとidがdoc-titleの「Anime Japan Expo」がログに出力されます。

クラス名を指定するgetElementByClassNameメソッド

getElementByClassNameメソッドでは、クラス名を指定して要素を取得します。

書き方

parser.getElementByClassName(対象の要素,クラス名)

実際のコードはこちらです。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLByClassName() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      paragraph = parser.getElementsByClassName(xml, 'paragraph');//パラグラフを指定してます。
  Logger.log(paragraph[0].getValue());
}

クラス名がparagraphの「Do you like Anime?」がログに出力されます。

タグを指定するgetElementByTagNameメソッド

最後に、タグ名を指定するgetElementByTagNameメソッドです。

書き方

parser.getElementByTagName(対象の要素,タグ名)

サンプルコードはこのようになります。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLByTagName() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      title = parser.getElementsByTagName(xml, 'title');
  Logger.log(title[0].getValue());
}

こちらの場合は、titleタグの「Anime Japan Expo」がログに出力されます。

最後に

今回は、Google Apps ScriptでHTMLやXMLをパースするライブラリ「parser」についてお伝え致しました。HTMLやXMLをパースするイメージを掴んでいただけたでしょうか。Google Apps Scriptでスクレイピングをする際にきっと役立つと思います。:1

【追記 2017/01/23】ほかにも良さげなPaserライブラリを見つけました

「Parser」という同じ名前のライブラリを発見しました。Parsingの仕方が異なりますが、こちらも便利そうです。 ぜひ、参考にしてみてください。

www.kutil.org

読者登録をお願い致します!

本ブログではPython、Google Apps Scriptの役立つテクニックを公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

tadaken3.hatenablog.jp

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~


  1. 今回掲載したライブラリは自由に使ってもらって構いません(MIT ライセンス)。