メインコンテンツへスキップ
見出し画像

Pythonでやってみた7:スクレイピングシステム の作成Selenium×tkinter×Pyinstaller

    KIYO

    1.概要

     前回紹介したスクレイピングをそれっぽいシステム風に使えるように作成してみました。基礎コードはすべて下記記事を参考にしています。

    2.システム作成の流れ

     今回作成したシステム作成の流れは下記の通りです。

    【システム作成の流れ】
    1.基本的なスクレピング処理を作る。
    2.1.をモジュール化してtkinterの関数として組み込む
    3.2を丸ごとPyinstallerでexe化する。

    3.コード紹介

     上記の流れで作成してきます。フォルダ構成は下記の通りです。

    【各種ファイルの説明】
    ●Selenium用ドライバ:chromedriver.exe
    ●スクレイピング用モジュール:webscraping1.py
    ●ID・PASS管理用モジュール:secretidpass.py
    ●tkinter用ファイル(exe化用):webスクレイピングシステム.py

    画像

    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"にしたらすっきりするやん・・

     
     
     

    KIYO

     
     
    普段は製造業で企画/開発/設計しております。記事はプログラミング・機械学習、IoT関係の記事をメインで作成し、なるべく1つの記事で知りたいことを網羅していきます。内容は学術的より実装・アウトプット(ほしくなるもの)を重視して作成しています。 面白そうな仕事があればやりたいです!

    あなたへのおすすめ