Pythonでやってみた7: スクレイピングシステム の作成Selenium×tkinter×Pyinstaller
1.概要
前回紹介したスクレイピングをそれっぽいシステム風に使えるように作成してみました。基礎コードはすべて下記記事を参考にしています。
2.システム作成の流れ
今回作成したシステム作成の流れは下記の通りです。
3.コード紹介
上記の流れで作成してきます。フォルダ構成は下記の通りです。
3-1.スクレイピングのモジュール作成
前回の記事をそのまま関数して|pyファイル⦅モジュール⦆としました。
[webscraping1.py]
import os , datetime, time
from dataclasses import dataclass
from selenium.common.exceptions import NoSuchElementException
from selenium import webdriver
#UsernameとPasswordを自作モジュールから取得
import secretidpass as secret
username, password = secret.ID().ID, secret.PASS().PASS
def main():
#ブラウザの立上
driver = webdriver.Chrome('chromedriver.exe') #GUI用
driver.implicitly_wait(5)
url = 'https://www2.pitapa.com/login.html'
driver.get(url)
#ログイン操作
driver.find_element_by_name("id").send_keys(username)#ID入力
driver.find_element_by_name("password").send_keys(password)#PASS入力
driver.find_element_by_name("login").click() #ログインボタンをクリック
driver.find_element_by_link_text("ご利用代金・明細照会").click()
meisai = driver.find_elements_by_tag_name('select')[1]
meisai.click()
latestmonth = meisai.text.splitlines()[0]
meisai.send_keys(latestmonth)
driver.find_element_by_name("displaySubmit").click()
#CSVボタンを押す。
driver.find_element_by_name("csvSubmit").click()
time.sleep(1)
driver.quit()
#ダウンロードしたCSVファイルを作業ディレクトリに移動
import shutil
#推定ファイル名を作成
today = datetime.datetime.today()
csvname = today.strftime("%Y%m") + ".csv"
#ダウンロードしたCSVファイルを作業ディレクトリに移動
path_donwload = "C:/Users/KIYO/Downloads"
path_csv = os.path.join(path_donwload, csvname)
if os.path.exists(path_csv):
shutil.move(path_csv, os.getcwd())
print(f'CSVファイルを{os.path.dirname(path_csv)}->{os.getcwd()}に移動しました。')
if __name__ == '__main__':
main()
3-2.tkinterにスクレイピングの関数追加
tkinterには「ウィンドウを閉じるタブ」と「スクレイピング処理するボタン」を追加しました。ボタンを押して期待される動作ができれば成功です。
[In]
import tkinter as tk
import secretidpass as sec
import webscraping1 as webs1
def main():
webs1.main() #モジュールからスクレイピング用関数を呼び出し
base = tk.Tk()
base.geometry('300x50') #ウィンドウサイズの調整
base.title('Webスクレイピングシステム')
menubar = tk.Menu(base) # メニューバーを作成
base.config(menu=menubar) # メニューバーを設定
tab = tk.Menu(menubar) # メニューを作成
menubar.add_cascade(label="ファイル", menu=tab) #タブを追加
tab.add_command(label="閉じる", command=lambda: base.destroy())
tk.Button(base, text="Pitapa領収書", width=30, command=main).pack()
base.mainloop()
3-3.Pyinstallerでexe化
最後に上記で作成したtkinterのファイルをexe化します。終了のお知らせを見たいため"--noconsole"オプションは無しにしました。
[Terminal]
pyinstaller Webスクレピングシステム.py --onefile
4.完成品
完成したexeファイルを実行してみます。なんかごちゃごちゃ出ますが動いたのでヨシッ!
なお今回テスト用として作っており丁寧にパスを通していないため、exeファイルは開発したフォルダ内でないと動きませんのでご留意ください。幅広く使う場合はsysライブラリなどでパスを通せばいけるはずです。
あとがき
ふと思って作ってみたけどすんなりいってよかった。作成したスクリプトを共有するときstreamlitばっかり使ってたけど、簡易システムであればこういうパターンもありかも。
【備忘録】
追記1:処理完了はtkinterのメッセージボックスの"showinfo"をいれてpyinstallerの"--noconsole"にしたらすっきりするやん・・
この記事が気に入ったらサポートをしてみませんか?