みなさん、こんにちは。クラケンと申します。
今回は、初心者でもできるPythonでの作業自動化について、Pythonを学習中の方、これからプログラミングやPythonを学ぼうと思っている方に向けて、実例を交えながらわかりやすく解説していきたいと思います。
この記事を読むことで、こんなことがわかります!
- Pythonでできること
- プログラミング歴3か月で作れる作業自動化プログラムの実例
- Webスクレイピングの実例
- Pythonでエクセルファイルを扱う方法
ちなみに、この記事を書いている僕は、
・文系出身
・プログラミング学習歴3か月(※本記事執筆時点)
・最初に学んだ言語は、Python
という感じです。
では、よろしくお願いします!
【Python自動化】初心者でもできること
まず、Pythonでできることで初心者にもできるものとして、次の2つをご紹介しようと思います。
- Webスクレイピング
- エクセル作業自動化
それぞれ簡単に説明します。
①Webスクレイピング
Webスクレイピングというのは、web上から特定の文字列を含む情報を自動収集してくる技術です。
もう少しだけ詳しく説明すると、あなたが普段見ているGoogle Chromeだったり、Safariだったりで表示されるWebサイトは、HTMLとCSSという言語を使って、記述され、装飾されています。
Webスクレイピングでは、このHTMLやCSSを読み解いて、そこから特定の文字列を含む部分を見つけて情報を取り出す処理です。
Pythonには、このWebスクレイピングのためのライブラリがありますのでWebスクレイピングを使ったプログラムを簡単に作ることが可能です。よく使われるライブラリには、BeautifulSoupなどがあります。(ただし、スクレイピングを禁止しているサイトもあります。また、不特定多数が同じサイトに同時にスクレイピングを行うとサーバーに強い負荷がかかるので注意が必要です。)
(※参考:⇒Webスクレイピングについて詳しく知りたい方はこちら)
②エクセル作業自動化
これは、読んで字のごとくです。
Pythonには、エクセルファイルを自動で操作するためのライブラリも豊富にあります。
僕がよく使うライブラリとしては、openpyxlがあります。
エクセルファイルの読み込み・作成、シートの作成、セルの値の編集などのエクセル作業をライブラリを使うことで自動化することが可能です。
(※参考:openpyxlの使い方について詳しく知りたい方はこちら)
実際にこれらのライブラリを活用して、僕の本業で行っているエクセル作業の自動化にチャレンジしてみたので、その一部をご紹介します。
Pythonでエクセルデータの自動更新
では、早速ご紹介します。
今回僕が作成したのは、Webスクレイピングとエクセル作業自動化の技術を使い、Webからデータを取得して、エクセル管理表をアップデートする、という自動化プログラムです。
(※コードの書き方については、もう少し効率良い書き方があると思います。あくまでこんな風に書くとこんなことができるというイメージを掴むため、とご理解ください。)
プログラムの流れとしては、
- エクセルの管理表データの読み込み
- 読み込んだデータを基に対象のWebサイトをスクレイピング
- スクレイピングで取得した情報をエクセルにコピー
- 最後にエクセルを保存して終了
また、僕の場合、会社のセキュリティ上、仕事のパソコンで自作のPythonプログラムを動かすことができないので、更新したエクセルファイルを自動でメール添付して送付し、LINE NotifyのAPIを使ってプログラムの更新と完了を通知するようにプログラムを作ってみました。
(※LINE Notifyについても後日記事を書こうと思いますが、どんなものかすぐに知りたい方は、こちらが参考になると思います。)
実際にコードの一部をご紹介します。
先ほどの4つの工程を、A) エクセルの処理をするファイル、B) スクレイピングをするファイル、の2つに分けてプログラムを作成しました。
基となるエクセルの管理表として、こちらのサンプルファイルを使います。(ファイル名:sample.xlsx)
まずは、A) エクセルの処理をするファイル
import openpyxl
# ライブラリopenpyxlを導入
file="sample.xlsx" # ファイル名を何度も入力する必要がないように変数に代入
def excel_update(): # defを使って関数化 こちらは既存のエクセルファイルの読み込み
wb=openpyxl.load_workbook(file) # openpyxlを使って、変数"file"のファイル名を持つエクセルファイルを読み込む
ws=wb['Sheet1'] # sample.xlsxのエクセルファイルの中のSheet1というシートを指定し、変数wsに代入
a=ws['A1'].value # Sheet1のA1セル内の値を、変数aに代入
print(a) # print関数で変数aにA1セルの値が代入されていることを確認
return a # 取得したセルデータを次の処理に渡すため、値を返す
def excel_renew(date,time): # こちらはスクレイピング結果を受け取って、エクセルデータを更新する処理を関数化したもの
wb=openpyxl.load_workbook(file)
ws=wb['Sheet1']
ws['B1']=date # wsにエクセルシートのデータが入っており、[]でセルの場所を指定すると、そのセルの値を編集できる
ws['C1']=time
wb.save('sample_updated.xlsx') # ここでエクセルファイルを保存。念のためファイル名を分けましたが、同じでもOK
print('エクセル更新完了しました!') # 最後に処理完了を表示
次に、B) スクレイピングをするファイル
(※今回BeautifulSoup以外にseleniumというライブラリも使用しています。これは、ブラウザを自動で操作することができるライブラリです。下記のプログラムでは、Google Chromeを自動操作させており、それには、別のファイルが必要ですので、こちらからお使いのChromeのバージョンに合わせてファイルをダウンロードする必要があります。)
from selenium import webdriver # seleniumというブラウザを自動操作するライブラリ
from bs4 import BeautifulSoup # BeautifulSoupでスクレイピングを行う
import excel_update # 先ほど作ったエクセル処理のpyファイルを読み込み
from time import sleep
def web_scraping():
track_no=excel_update.excel_update() # エクセルから取得したセルの値を変数に代入
print(track_no) # print関数で変数に値が正しく代入されていることがわかる
driver=webdriver.Chrome('chromedriver_win32\chromedriver') # seleniumを使って、Google Chromeを起動
driver.get('https://toi.kuronekoyamato.co.jp/cgi-bin/tneko') # 対象のページへ移動
search_bar=driver.find_element_by_name('number01') # HTML/CSSのタグを頼りにページ内の情報を取得していく
search_bar.send_keys(track_no) # ここでは、先ほど取得した追跡番号を検索バーに入力する処理を行っている
button_1=driver.find_element_by_name('sch') # お問い合わせボタンを探し出し、クリック
button_1.click()
sleep(2) # ページの読み込みを待つため、一応2秒待機
html=driver.page_source # 読み込んだページの情報を取得し、変数htmlに代入
soup=BeautifulSoup(html, 'lxml') # BeautifulSoupを使って、変数htmlに入っているページ情報を読み込む
data=soup.find_all(True, {'class':'meisaibase'}) # 読み込んだページ情報の中から、欲しいデータが含まれているHTML/CSSのタグを見つけ、情報を抽出
print(data) # print関数で情報が正しく取れているか確認しながら行うとわかりやすい
for x in range(len(data)):
arrival=data[int(x)].find_all('td')
print(arrival) # 情報が正しく取得できているか確認
date=arrival[1].get_text()
arrival_date=date.split(' ')[0] # ここまで来たらあとは取得したテキスト情報をキレイに整えていく。ここは到着予定日の情報
arrival_time=date.split(' ')[1] # こっちは、到着予定時刻
driver.close() # 最初にseleniumで立ち上げたブラウザを終了する
excel_update.excel_renew(arrival_date, arrival_time) # excel_updateの中のエクセルに値を入力していく関数の引数に今回の結果を代入して、処理を実行
if __name__ == '__main__': #作成した関数を実行するための処理
web_scraping()
この2つのプログラムを作成し、B) スクレイピングをするファイル(web_scraping.py)を実行すると、A) エクセルの処理をするファイルのファイルをまず実行して、エクセルファイルを読み込み、そこから取得した値を使って、B)でWebスクレイピングを行います。
そのスクレイピングの結果を使って、今度はA)の中のもう一つの関数を実行することで、データを更新したエクセルファイルを作成・保存できます。最終的に保存したファイルは、こんな感じになるはずです。
まとめ
こんな感じで、今回は、Pythonを使ってできることをご紹介しました。
また、Webスクレイピングとエクセルファイルの読み込み・作成・保存を自動で行うプログラムについても実例をご紹介させていただきました。
日常の業務で、Web上から情報を取ってきてエクセルの表をアップデートする、という定型作業があるのであれば、こんな感じで自動化させるとかなり時間が節約できるのではないかと思います。
ただし、くれぐれもご自身の会社の規程やスクレイピング対象のサイトの規約などをよく確認したうえで、迷惑をかけない範囲で楽しんでみてください。
もしこの記事を読まれた方が、「Pythonを学んでみよう!」「プログラミングを勉強してみよう!」と思ってくださったら嬉しいです!
僕もまだまだ初心者ですので、一緒にレベルアップしていく仲間が増えればと思います。(^^♪
実際にPythonの学習方法やそもそもPythonってどんな言語か知りたい方は、他にも記事を書いていますのでよかったら参考にしてみてください。
では、本日も最後まで読んでいただきありがとうございました。
次回もまたよろしくお願いします!
コメント