WebスクレイピングやREST APIの呼び出しに挑戦しよう – 今日からはじめるAlteryx再入門アドベントカレンダー
こんにちは。
データアナリティクス事業本部ソリューション部プリセールススペシャリストの兼本です。
当エントリは2020年アドベントカレンダー『今日からはじめるAlteryx再入門』の07日目のエントリです。
このアドベントカレンダーの企画は、Developers.IOにてAlteryxの情報をお届けしてきたメンバーによるAlteryxを1から学べるシリーズになっています。Alteryx触ってみたい!という方の入門記事として、Alteryx使っているけど改めて基礎から学びたい!という方の再入門記事としてご活用いただければ幸いです。
7日目の今日は「WebスクレイピングやREST APIの呼び出しに挑戦しよう」ということで、ダウンロードツールの使い方をご紹介します。
ファイルをダウンロードする
ダウンロードツールは、その名の通り、HTTPやFTP経由でファイルをダウンロードするためのツールです。例えば、厚生労働省が公開しているCOVID-19の陽性者数に関するオープンデータはCSVファイルでダウンロードすることができます。
このページではいくつかのCSVファイルがダウンロードできますが、同じファイルに毎日データを追記して更新されているので、以下のようなワークフローでデータを取得することができます。
- 最初のテキスト入力ツールでは日本国内のCOVID-19陽性者数を示すCSVファイルにアクセスするためのURLを示す「URL」フィールドを作成します。
- ダウンロードツールの「基本設定」タブでアクセスするURLとして「URL」フィールドを指定します。データに日本語などのマルチバイト文字が含まれる場合はデータのエンコード形式にも気を付けましょう。
- 「ヘッダー」タブではHTMLヘッダを設定することも可能ですが、今回は特に何も設定していません。
- 「ペイロード」タブではHTTPアクションを指定できます。今回はデフォルトの「GET(またはFTP)」を使用しますが、ほかにも「POST、PUT、DELETE、HEAD」およびカスタムアクションを指定することができます。「ペイロード」タブではHTTPクエリパラメータを設定することもできます。
- サイトアクセス時にパスワード認証が必要な場合、「接続」タブでユーザ名とパスワードを設定することができます。
- ワークフローを実行すると以下のような結果を得ることができます。DownloadHeadersにはサーバからのレスポンスが、DownloadDataにはサイトから返されたデータが含まれています。
DownloadHeadersの内容(一部加工しています)
HTTP/1.1 200 OK Server: Apache X-Frame-Options: SAMEORIGIN Last-Modified: Mon, 07 Dec 2020 09:00:00 GMT ETag: "1234-5x5xfxdx3x8x4" Accept-Ranges: bytes Content-Length: 4744 Content-Type: text/csv Date: Mon, 07 Dec 2020 09:00:00 GMT Connection: ...
DownloadDataの内容(先頭から数行のみ抜粋)
日付,PCR 検査陽性者数(単日) 2020/1/16,1 2020/1/17,0 2020/1/18,0 2020/1/19,0 ...
取得したデータをファイルとして保存したい場合は、ワークフロー内で保存するファイルパスを準備する必要があります。
- テキスト入力ツールには、ファイルの保存先ディレクトリのパスを追加しています。保存先ディレクトリは存在している必要があります。(Alteryxはワークフロー実行時にフォルダを作成しないので存在しないパスを指定するとエラーになります。)
- フォーミュラツールでは、ソースURLに含まれるCSVファイル名を取得してファイルの保存先フルパスを作成します。
- ダウンロードツールの「基本設定」タブで出力をファイルに変更し、フィールドからのファイル名として前の手順で作成したフルパスを指定します。
- ダウンロードしたCSVファイルをExcelで開いた状態です。今回はファイル名を固定にしましたが、保存する際にファイル名にワークフローの実行日付などを接尾辞として追加するなどすれば履歴を残すこともできます。
HTMLファイルをダウンロードして中身を解析する(Webスクレイピング)
ダウンロードツールを使うと、HTMLデータもファイルとしてダウンロードすることができます。次の例では弊社のセミナー告知ページをWebスクレイピングして開催中のセミナー一覧を取得します。
- データを取得するフローは最初の例と同じですが、アクセスするURLのみ変更しています。
- ワークフローを実行すると指定したページのHTMLソースを取得していることが確認できます。
- HTMLファイルの内容を解析して取り出したいデータを探します。これが一番手間のかかる作業なのですが、Google Chromeをお使いであれば対象ページの構造を把握するためにChrome DevTools(開発者ツール)を利用できます。
- 今回、セミナーの一覧を作成するために必要なデータは以下の通りとします。
欲しいデータ | HTMLコード例 |
---|---|
カテゴリ | <h2 class="cm-ttl cm-ttl-large">開催予定のセミナー</h2> |
セミナー名 | <div class="events__txt">【ウェビナー】AWS re:Inventをまとめて振り返る「CM re:Growth 2020 Online」</div> |
開催日 | <time datetime="2020-12-18">2020.12.18</time> |
- テキストから特定のデータを取り出す方法はいくつか考えられますが、本アドベントカレンダーの4日目でもご紹介をしている正規表現ツールを使います。
- 作成したワークフローは以下の通りです。
- テキスト全体から必要な部位だけを切り出して行を増やす場合は、正規表現ツールの出力方法で「トークン化」を使うといいでしょう。今回の場合はカテゴリとセミナー名を示すタグ後続に一致するデータをトークン化しています。開催日のデータはセミナー名を示すタグ内に含まれているので、ここではトークン化の対象にはしていません。
- ワークフローを実行するとDownloadDataの部分が以下のように複数行にトークン化されます。
- 続いてカテゴリ、セミナー名、開催日に相当するデータを取り出します。この処理には正規表現ツールの出力方法で「解析」を使用します。解析では()で囲んだ部分に一致するデータを変数として取り出すことができます。
[セミナー名]
- それぞれのデータを解析した結果、以下のような出力を得ることができました。
- カテゴリ名は各カテゴリの1行目のみデータがあるので、複数行フォーミュラツールを使用して2行目以降に同じデータをコピーします。
- セレクトツールで不要なデータを削除すれば、開催中のセミナーリストの完成です。
このテクニックを応用することで、様々なWebサイトのデータを取得することが可能となります。
RESTful APIを実行して応答結果を解析する
Webスクレイピングの例でも分かる通り、ダウンロードツールはHTTP Requestを実行することができるため、REST APIを実行することも可能です。
ここでは、国税庁の法人番号公表サイトで提供されている「法人番号システム Web-API」を実行する例をご紹介します。
法人番号システムはインターネット経由で指定した法人番号や法人名で抽出した法人に係る情報を取得できるREST APIです。申請が許可されればどなたでも利用可能ですので、興味のある方は国税庁のWebサイトからお問い合わせください。
API仕様はシンプルで、法人名を基準として検索を実行する場合は、以下のURLを実行します。
https://api.houjin-bangou.nta.go.jp/4/name?id=xxxxxxxxxx&name=companyname&change=1&type=12
パラメータ名 | パラメータの説明 |
---|---|
id | 申請受理後に郵送されるアプリケーションID |
name | 取得の対象とする法人名(UTF-8)をURLエンコードした値 |
change | 法人名や所在地の変更(1:履歴あり, 2:履歴なし) |
type | 応答データの形式と文字コードを指定(01:CSV/ShiftJIS,02:CSV/UTF-8,12:XML/UTF-8) |
作成したワークフローは以下の通り。基本的にこれまでの作りと同じなのでAPIといっても怖くありません。
- テキスト入力ツールではWeb APIシステムにリクエストするURLを作成しています。弊社(クラスメソッド)の法人番号を検索してみましょう。この時点ではURLエンコードはしていませんが、アプリケーションIDはお見せできないのでマスクしています。
-
ダウンロードツールの基本設定です。URLエンコードを行う場合は「URLテキストをエンコードする」のチェックを有効にします。(デフォルトで有効)
- 応答データはXML形式ですので、XMLパースツールで解析してみましょう。
- ワークフローを実行するとクラスメソッドの法人情報を取得することができました。弊社以外にクラスメソッドという会社はないようです。日本で唯一というのはそれだけで価値がある気がしますね。
- ちなみに検索する法人名を「クラス」だけにすると508件のデータが返されました。複数のデータが返された場合もXMLパースツールが正しく動作することが確認できます。
法人番号検索システムはアプリケーションIDがあれば認証なしに利用することが可能ですが、APIによってはOAuthやAccessTokenなどの認証認可プロセスが必要な場合がありますのでご注意ください。
認証認可が必要なAPIへのアクセスについては、以下のエントリが参考になるかと思いますので、併せてご確認ください。
関連ページ:
- AlteryxでGoogleのAPIからデータを取得する
- AlteryxからSalesforce PardotへのAPIアクセス
- コーディング無し!ZendeskのチケットをAlteryxで集計してSlackに通知させてみた
まとめ
ダウンロードツールを使用して様々なデータをダウンロードして利用する方法についてご紹介しました。明日は「データの確認をしよう」をお届けする予定です。
最後までお付き合いいただきありがとうございました。