簡単なRPAを自作してみた【株価取得してエクセルに書き込み】

Pythonを使ってRPAを自作で作ってみた

疑問を感じている人

RPAってどんなことに使えるの?プログラミング初心者でも作れるかな?

こんな疑問に答えます

RPAとはRobotic Process Automationの略。ホワイトカラーの定型業務を自動化してくれるロボットのことです。

世間では「ロボットに奪われる職業」が話題になって久しいですが、今の段階で企業に普及し始めているのがRPA。UiPathやWinactorなどが有名ですね。

一方で、言葉では聞いたことがあってもRPAが動作するのを見たことが無かったり、職場で導入されていても、システムからのデータ抽出程度にとどまっている企業も多いはず。

筆者の勤務先も同じです。「これくらいなら自分で作れるのでは?」と感じたので、プログラミング言語のPythonを勉強して簡単なRPAを作ってみました。

この記事でわかること
  • RPAが実際に動く様子
  • RPAを使って株価を自動取得する方法
この記事を書いている人
ロボットに仕事を奪われる筆頭とされている経理職の人間。文系ですがプログラミングを勉強しており、自身の勉強成果のアウトプットも兼ねて記事にまとめています。

株価を自動で取得するRPAを作ってみた

まずは完成したRPAからご覧ください。
実行してることは以下の通りです。

  • 実行時にコマンドライン引数から銘柄名を取得
  • Chrome Driverとseleniumを使ってスクレイピング
  • 取得した情報をExcelに書き込み

簡単に作れて、かつ需要が多そうな“Webスクレイピング”と“Excelの操作”を組み合わせたRPAツールです。

個人トレード目的や、業務のなかで株価を確認する必要がある人もいるかと思います。

株価を調べるためには専用のアプリにログインしたり、自分でネット検索する必要がありますが、その工程を自動化してみました。

Pythonで簡易なプログラミングを組んだだけですが、ロボットによる作業の自動化なので、RPAをイメージするのにいい題材になるでしょう。

筆者は経理職なので、決算期ごとに会社が保有する有価証券の時価評価をしていますが、ここでお見せしたツールに改良を加えれば、株価のチェックからExcelで仕訳を作成、会計システムにアップロードまで自動化できそうですね

RPAのコード説明

コード
import time, sys, re, openpyxl
from selenium import webdriver
# ①コマンドライン引数から銘柄を取得
company = sys.argv[1]

# ②chromedriverを使って株価情報を取得
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
time.sleep(5)
search_box = driver.find_element_by_name("q")
search_box.send_keys(company + " " + "株価")
search_box.submit()
elem = driver.find_element_by_class_name("N9cLBc")
stock_info = elem.text

# ③株価、日付、時刻の正規表現を作成
price_regex = re.compile(r"\d*,\d{3}")
date_regex = re.compile(r"\d*月\d日")
time_regex = re.compile(r"\d{2}:\d{2}")

# ③正規表現を使って株価情報から、株価・日付・時刻を抽出
stock_price = price_regex.search(stock_info).group()
price_date = date_regex.search(stock_info).group()
price_time = time_regex.search(stock_info).group()

time.sleep(5)
driver.quit()

# ④エクセルに書き込み
wb = openpyxl.Workbook()
wb.worksheets[0].cell(row = 1, column = 1).value = "銘柄"
wb.worksheets[0].cell(row = 1, column = 2).value = "株価"
wb.worksheets[0].cell(row = 1, column = 3).value = "日付"
wb.worksheets[0].cell(row = 1, column = 4).value = "時刻"
wb.worksheets[0].cell(row = 2, column = 1).value = sys.argv[1]
wb.worksheets[0].cell(row = 2, column = 2).value = stock_price
wb.worksheets[0].cell(row = 2, column = 3).value = price_date
wb.worksheets[0].cell(row = 2, column = 4).value = price_time

wb.save("stock_price.xlsx")

①コマンドライン引数から調べたい株銘柄を取得

このプログラムでは、コマンドラインからプログラムを実行するときに引数を設定し、ここで設定された株価の銘柄を取得する仕組みです。

動画では、「get_stock_price.py トヨタ」と表示されていましたが、最初のPythonファイルが上記のコードを記述したプログラムで、その次に記述されているのが、株価を調べたい会社の銘柄名ですね。

②ChromeDriverを使って株価情報を取得

続いて、ChromeDriverを使って株価を取得します。ChromeDriverとは、Google Chromeの操作を自動化してくれるツールのようなもの。

このツールとPythonのライブラリであるseleniumを組み合わせてWebスクレイピングをしていきました。

グーグル検索では、「会社名 株価」と検索すると一番上に直近の株価が表示されるようになっています。この仕組みを使って株価を取得しました。

いくつかの株価を検索してみたところ、株価情報は共通して”N9cLBc”というクラスの中に格納されていたので、そこに入っているテキスト要素を全て抜き出しています。

③正規表現を使って株価情報を抽出

先ほどの工程で抽出できた文字列は

TYO: 7203

6,794 JPY −214 (3.05%)

3月6日 15:00 JST · 免責条項

6,794 3月6日 15:00

これだと不要な情報が多すぎるので、このテキストから最低限必要そうな以下の情報を抜き出します。

  • 株価
  • 日付
  • 時刻

テキストからこれらの情報を抜き出すために、「正規表現」というものを使います

正規表現とは、ある特定の型を定義して、それに当てはまる文字列を抽出するための技術です。わかりやすい例が電話番号。

電話番号は、例えば東京都の電話番号は2ケタ-4ケタ-4ケタで構成されているので、”\d{2}-\d{4}-\{d}4”といった形で表現できます。

\dが任意の数字、波括弧が繰り返し回数を示しているんですね

これを参考に、

  • 株価 = stock_price
  • 日付  = price_date
  • 時刻 = price_time

コード中ではそれぞれ上記の変数(ハコ)に格納しておきます。

④抽出した株価情報をエクセルに書き込む

pythonを使えば、Excelの操作も簡単にできます。

Pythonのopenpyxlを使ったexcelの基本的な操作【初心者向け】

上記のコードはかなり雑ですが、1行目に銘柄・株価・日付・時刻を表すヘッダーを用意し、2行目に先ほど取得した株価情報を書き込んでいくように記述しています。

RPA株価取得ツールの改善点

とりあえず動くことを目的として作ったので、このツールの改善点も書き留めて置きます。
RPAでは「こんなこともできる」といったイメージの参考になるかもしれません。

株価の銘柄をいちいち指定するのがめんどくさい

このRPAツールでは、プログラムを実行する際にいちいち取得したい銘柄を指定しなければなりません

これでは実際にネットで検索するのとさほど代わりないですね。なので、Excelに株価銘柄一覧作っておき、そこから銘柄情報を取得、更新できるような仕組みが便利かなと思いました。

上記で示した通り、Pythonを使えばExcelの操作も簡単にできるので、この仕組みを実装するのはさほど難しくありません。

株価情報を安定的に取得できる保証がない

これはWebスクレイピングをする以上仕方ないかもしれませんが、HPの構成が変化したらこのRPAツールは使えなくなります。

また、企業によっては、なぜかグーグル検索で一番上に株価が表示されない銘柄もあったりします

今回は簡易的なツールとして、検索画面ですぐに確認できるデータを引っ張ってきましたが、データの参照元を株価情報サイト等にすれば、もう少し安定感は増すでしょう。

これくらいのRPAツールなら自作も簡単?!

参考までに筆者のプログラミング勉強歴は1年未満です。最初はWEB系の副業をやろうと思っていたので他の言語を勉強しており、Pythonを勉強し始めたのはここ3ヶ月くらい。

だいぶ遠回りをしましたが、数ヶ月でこれくらいは作れるようになったので、興味があればチャレンジしてみるのもいいかもしれません。

Python入門者にオススメの勉強方法 Python入門者におすすめの勉強法【超初心者向け】

以上です!ここまで読んでいただきありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です