Kompira

Menu Menu

Enterprise Technical information

外部との連携 Webページから内容を取得する

デスクトップでの作業を自動化するためにRPA (Robotic Process Automation) が広く知られています。しかし、ブラウザを通じたWebアプリケーションの操作であればブラウザとサーバ間の通信を模倣するだけで再現することができます。例えば特定のフォームに値を入力して送信するような操作や、Webページから値を抽出するスクレイピングのような操作を行うことができます。

ここではKompiraを用いて通信を模倣することで通常はブラウザ画面を用いて行う作業を自動化します。今回はWebサイトから内容を取得し、フィルタリングして表示するジョブフローを作成します。

htmlファイルを扱うためにPythonのライブラリであるBeautiful Soup4を使用します。ライブラリの使用に関しては「Pythonで記述された処理をKompiraから呼び出す」の記事にて紹介しています。このライブラリを用いて本コラムのタイトル一覧を取得します。

 

動作確認環境

ソフトウェア バージョン
Kompira 1.5.0
LinuxOS CentOS7.5_1804

 

Pythonライブラリの準備

まずPythonライブラリであるBeautifulSoup4を導入します。Kompira1.5では/opt/kompira/bin/pipを使用してライブラリをインストールします。
Kompiraサーバにログインし、以下のようにしてインストールします。

 

$sudo /opt/kompira/bin/pip install beautifulsoup4

 

インストール後、つぎのコマンドを実行し情報が表示されればインストールされています。

 

$/opt/kompira/bin/pip show beautifulsoup4

Name: beautifulsoup4
Version: 4.6.0
Summary: Screen-scraping library
・・・

 

htmlリソースの取得

まずKompiraの組み込み関数であるurlopen()を使いHTTPリクエストを送信して結果を取得します。urlopen()の詳細に関しては「簡単なWebサーバの監視をする」の記事にて紹介しています。今回はKompiraの運用自動化コラムのページのhtmlソースを取得するのでつぎのジョブフローを作成します。

 

|url = "https://www.kompira.jp/colmun"|

urlopen(url,quiet=true) ->
[response = $RESULT] ->
[status_code = response.code] ->
#code=200であれば取得成功
print(status_code)

 

取得に成功していた場合200が表示されます。

 

Kompiraライブラリの作成

今回はコラムページからタイトル一覧を取得するライブラリを作成します。ライブラリはHTMLリソースを取得するジョブフローと同じ階層にKompiraWebpageAnalyzerという名前で作成します。
ブラウザ付属のツールを用いてウェブページの内容を確認します。ここではChromeのデベロッパーツールを使って取得しています。

 

 

チャネルを利用して外部システムからデータを受信するというタイトルはつぎのような内容であることがわかります。

 

<a class="qa-q" href="https://www.kompira.jp/column/receive_inbound_data/">チャネルを利用して外部システムからデータを受信する</a>

 

タイトルのタグとクラスがわかったので、タグが<a>でクラスが”qa-q”である要素を取得するライブラリを作成します。

 

from bs4 import BeautifulSoup

def get_title_table(html):
    soup = BeautifulSoup(html, 'html.parser')
    return(soup.find_all('a', class_="qa-q"))

 

ただこのままではタグ等がついたままで扱いづらいので、タイトル以外を除去して取得する関数をライブラリに追記します。

 

import re

def remove_tag(title_with_tag):
    return(re.sub(r'<.*?>','',title_with_tag))

 

タイトル一覧の取得
作成したライブラリを使用してタイトル一覧を取得するようにジョブフローをつぎのように作成します。

 

|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|
  #タイトルのみ切り出し
  [./KompiraWebpageAnalyzer.remove_tag: title]->
  print($RESULT)
}

 

実行に成功すればつぎのようにコラムのタイトル一覧が表示されます。

 

 

本記事ではコラムサイトのhtmlソースからタイトル一覧を取得しましたが、htmlソースの他のタグやクラスを指定することで様々な情報を取得することができます。例えばテーブルの内容を取得し、行ごとに処理する事ができます。取得したいデータがどのようなタグやクラスを持つか確認することでその値を取得し、自動で処理することが可能になります。

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携