tech

勉強のために、各社の社説を収集してデータベース化する その10

長い期間続けてきた本企画ですが、ほぼ形が整ったので、いったん今回で最終回になります。

課題についての対応状況

課題としてあげていた、日付の自動判定は、標準出力に記事の日付を出力させることで手軽にチェックできることから取りやめても問題なくなりました。

同様にメンテナンス性や処理スピードも満足いくレベルまで改善しています。

また当初は各社説のDBへの格納を目指していたのですが、テキストですぐに開けることがわりと便利だったので、こちらも取りやめてます。

ただ、DBへの格納自体は折を見て実施しようと思います。その時は検索性や自然言語処理の機械学習をかませて、トレンドなどを解析してみたいと思います。

上記は、もう少し記事の本数がたまってから実施したいと思います。機械学習系はデータ量が十分でないと面白い結果が出ないので。

番外編

さて、最終回は番外編です。本体のプログラムの大枠は前回で完成を見ています。

今回はそれらをweb上の環境に移行して、開発上の利便性を高めてみた、という内容です。

どこからでもアクセス可能な開発環境

管理人の普段のpythonの開発環境はデスクトップPCです。この環境、性能は良いので満足していますが、ちょっとした移動時間や出張のときにアクセスが面倒という問題があります。

ノートPCに同期をとってもよいでのですが、やはり面倒なことと、地味にノートPCに性能が必要点で問題があります。

そこで探してみたところ良いものが見つかりました。Google colaboratoryです。

Googleが提供する、無料でも利用可能な開発環境で、pythonの機械学習プログラムなどをブラウザ上で実行させることが可能です。

もちろん、機械学習プログラム以外も動作させることが可能です。

その利便性から多くの開発者に活用されており、特にGoogleのアカウントを持っていれば、即座に利用可能なため初心者にはもってこいだと思います。

今回はそのGoogle colaboratoryの上に、今回作成したプログラムを上げてみました。

Google colaboratoryへ移植する際の変更点

今回ローカルのデスクトップ環境上で実行させていたプログラムをGoogle colaboratory上へ移植するに当たり、いくつか書き換えを行いました。

注意点として記載します。

まずファイルの書き出しです。Google colaboratory上でファイルを書きだして保存するためには、単にwrite()を行うだけだと足りません。

ファイル単体として別に保存する場合は、特別な実行が必要になります。

最も簡単なのはGoogle Driveへのアップロードです。

前準備として、Google Driveへのアクセス権限を取得します。

 google colaboratory
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

その後、下記のようなコマンドを実行します。
 python
upload_file_2 = drive.CreateFile()
upload_file_2.SetContentFile("upload_file_1.txt")
upload_file_2.Upload()

例としてこれらのコマンドは、Google driveへupload_file_1.txtをアップロードします。

https://qiita.com/5at00001040/items/d7867974d2fd1d21dbbf を参考にさせていただきました。

はまったところ

f = open(t_file, 'w', encoding='UTF-8')
でファイル操作していたら

 python
upload_file_2 = drive.CreateFile()
upload_file_2.SetContentFile("upload_file_1.txt")
upload_file_2.Upload()

に失敗しました。正確にはファイルは生成されるのだが、中身がありません

原因はfileをcloseしていないことが原因でした。

withなら確実に操作後にファイル閉じてくれてバグにもならないので、こちらを使うことを心掛けたいと思います。

seleniumも使える

Google colaboratory上でseleniumを使うこともできます。正直ブラウザ上で実行しているので、だめかと思ったのですが、普通に実行できます。

まず、Google colaboratory上で以下を実行しておきます。実行用のライブラリ読み込みです。

 google colaboratory
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

あとは、webdriverの呼び出しのoptionを適宜追加します。

 python
chrome_service = fs.Service(executable_path='./chromedriver')
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)

基本的にブラウザを起動しないheadlessモードを使うことになります。
headlessだけの追加では不足していたので、上記を指定します。
https://yuyuublog.com/colaboratoryselenium/を参考にさせていただきました。

他は変更なく、実行できました。



あとがき

今回は最終回として、便利な環境への移植と題して、Google colaboratory上への移植について説明しました。

少し、お作法はあるものの、それを踏みさえすれば簡単に動作させることができました。

実行速度はやや落ちるものの、アクセスの利便性はかなり高くなりました。

これまでGoogle colaboratoryの存在は知っていたものの、利用してこなかったのでもったいことしてました。

今後は積極的に活用していこうと思います。

-tech
-,