肩の力を抜いて

肩の力を抜いて

プログラミングネタが中心。ラクして成果を上げる仕組みを考える。

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でスクレイピングをする際にきっと役立つと思います。

今回掲載したライブラリは自由に使ってもらって構いません(MIT ライセンス)が、公式ライブラリではないので使用上起きた問題についての責任は負いかねます。自己責任での利用をお願いします