Web ページから内容を取得する

デスクトップでの作業を自動化するために 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 ライブラリを作成してみてください。

TOP