デスクトップでの作業を自動化するために RPA (Robotic Process Automation) が広く知られています。しかしブラウザを通じた Web アプリケーションの操作であれば、ブラウザとサーバー間の通信を模倣するだけで再現することができます。例えば特定のフォームに値を入力して送信するような操作や、Web ページから値を抽出するスクレイピングのような操作は、上記の方法で実現できます。
本稿ではブラウザ画面を用いて行う作業を、Kompira Enterprise を用いて通信を模倣することにより自動化します。具体的には Web サイトから内容を取得して表示する方法をご紹介します。
HTML ファイルを扱うために Python のライブラリである Beautiful Soup4 を使用します。ライブラリの使用に関しては「Python で記述された処理を Kompira Enterprise から呼び出す」にて紹介しています。このライブラリを用いて本コラムのタイトル一覧を取得します。
※ 本稿は Kompira Enterprise 1.6系に準拠した画像を用いています。
動作確認環境
本稿は、以下の環境で検証しています。
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.5.5.post11 |
OS | CentOS 7.8.2003 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.2.post4 |
OS | CentOS 7.8.2003 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.8 |
OS | CentOS Stream 8 |
Python ライブラリの準備
まず Python ライブラリである BeautifulSoup4 をインストールします。Kompira Enterprise では /opt/kompira/bin/pip を使用してライブラリをインストールすることができます。
それでは、Kompira Enterprise サーバーにログインし、次のコマンドを用いてインストールしてください。
$ sudo /opt/kompira/bin/pip install beautifulsoup4
インストール後、次のコマンドを実行しインストールを確認してください。
$ /opt/kompira/bin/pip show beautifulsoup4 Name: beautifulsoup4 Version: 4.12.2 Summary: Screen-scraping library ・・・
HTML リソースの取得
まず Kompira Enterprise の組み込み関数である urlopen() を使い、HTTP リクエストを送信して結果を取得します。urlopen() の詳細に関しては「簡単な Web サーバーの監視をする」にて紹介しています。今回は Kompira Enterprise の運用自動化コラムのページの HTML リソースを取得するので、次のジョブフローを作成し HTML リソースが取得できることを確認します。
| url = "https://www.kompira.jp/column" | urlopen(url, quiet=true) -> [response = $RESULT] -> [status_code = response.code] -> print(status_code) # code=200であれば取得成功
取得に成功していた場合、200が表示されます。
Kompira Enterprise ライブラリの作成
ここでは、コラムページからタイトル一覧を取得するライブラリを作成します。ライブラリは、HTML リソースを取得するジョブフローと同じ階層に KompiraWebpageAnalyzer という名前で作成します。
ブラウザ付属のツールを用いてウェブページの内容を確認します。ここでは Chrome のデベロッパーツールを使って取得しています。
「[事前準備] 接続先のサーバを登録する」というタイトルは次のような内容であることがわかります。
<ul class="list-column"> <li><a href="https://www.kompira.jp/column/prepare_registration_host/">[事前準備] 接続先のサーバを登録する</a></li> // 以下、省略 </ul>
タイトルに関係する HTML タグ情報がわかったので、以下のようなライブラリを作成します。
from bs4 import BeautifulSoup def get_title_table(html): title_table = list() soup = BeautifulSoup(html, 'html.parser') for ul in soup.find_all('ul', class_="list-column"): for li in ul.find_all('li'): title_table.append(li.a.text) return title_table
タイトル一覧の取得
作成したライブラリを使用して、タイトル一覧を取得し表示するジョブフローを次のように作成します。
| url = "https://www.kompira.jp/column" | urlopen(url, quiet=true) -> [response = $RESULT] -> # HTML コンテンツのみを抽出 [html_body = response.body] -> # タイトル一覧取得 [./KompiraWebpageAnalyzer.get_title_table: html_body] -> [title_table = $RESULT] -> { for title in title_table | print(title) }
実行に成功すれば、以下のようにコラムのタイトル一覧が表示されます。
本稿では、コラムサイトの HTML リソースからタイトル一覧を取得しましたが、HTML リソース中の他のタグやクラスを指定することで、様々な情報を取得することができます。興味がある方は、オリジナルの Kompira Enterprise ライブラリを作成してみてください。