今回はPythonを使ってできる自動化ってどんなものがあるのか?っていうことでいくつかコードを踏まえて書いていきたいと思います。Pythonを使って自動化したい作業があるならどんなものがあるのか参考にしてみてください。
もちろんこの記事で書いた事以外にもたくさんあるからあくまで一例です。
Pythonでダウンロードを自動化する
このページから画像を自動で取得したい・・・っていう時に使える技です。例えばこのサイトのあるページの画像を一撃で全部取得したいとかなったら、コードを実行すれば勝手にダウンロードして指定したフォルダに保存してくれる。(エラーは無視)
import requests
from bs4 import BeautifulSoup
import uuid
url = 'https://gadgelaun.com/?p=25532'
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
for img in soup.find_all('img'):
try:
t = requests.get(img['src'])
with open('/Users/U/Documents/images/' + str(uuid.uuid4()), 'wb') as f:
f.write(t.content)
except Exception:
pass
これを実行するとhttps://gadgelaun.com/?p=25532にある画像たちが/Users/U/Documents/images/
ディレクトリにuuidの名称で保存されるというもの。
画面内にある画像を一撃で全部ダウンロードしたいといった時に使える。ただそういうことを禁止しているサイトややって欲しくないサイトはたくさんあると思うから、やってもいい場合のみにしましょう。(このサイトでも実行しないでください・・・)
会社の仕事なんかで画像を保存しないといけないタスクなんかがある時に使えるかもしれない。コード量もそんなに多くなくて済む。
Pythonで動画編集を自動化する
動画編集に関しては以下の記事で軽く触れたんだけど、カットやトリミング・文字入れなどをすることができる。記事内ではmoviepyっていうものを使ってやっています。
動画の無音の部分を検知してカットしたりっていうのもできるはずだけど、動画の無音の部分を検知する処理が必要になってくる。
実装してしまえばあとはプログラムを実行するだけで動画の無音部分をカットして繋いでくれるっていうことができるから、プログラムで動画編集を楽したいっていう人にはいいかもしれない。テロップに関しても音声認識のプログラムを使えばできるはず。
ただ自動テロップするならPremiereProの音声のテキスト化やVrewもあるから、そういった動画編集ソフトを使うのがいいと思います。
Pythonでweb画面の操作を自動化する
Web操作を自動化したい場合もあると思います。pythonとseleniumを使ってブラウザの操作を自動化することができる。例えばこのサイトをブラウザで検索してみるとこんな感じ。
from selenium import webdriver
driver = webdriver.Chrome('C:/Users/rooibos-tea/Downloads/chromedriver.exe')
driver.get("https://www.yahoo.co.jp/")
# 検索バーを取得
search_bar = driver.find_element_by_class_name('_1wsoZ5fswvzAoNYvIJgrU4')
# 入力
search_bar.send_keys("ガジェラン")
# 検索ボタンを取得
search_button = driver.find_element_by_class_name('_63Ie6douiF2dG_ihlFTen')
# 検索ボタンをクリック
search_button.click()
自分で操作することなくプログラムでこういうことを行うことができる。以下の記事でseleniumを使ったことは書いています。
毎回決まった操作をするなら自動化してしまえば結構楽になりますよね。それとプログラムを使わなくても、Chromeの拡張機能を使って操作の自動化をできたりもするから、コードを書かないで自動化したいっていう場合は確認してみるといいですよ。
Pythonで画像処理を自動化する
プログラムに画像処理をさせることができる。OpenCVを使えば結構いろんなことができたりします。
- 画像の明るさ・コントラストを変える
- 画像をトリミングする
- 画像にモザイクをかける
- 画像の色を変更する
- ・・・
画像処理に関しては以下の記事でもいくつか書きましたね。
ちょっと変わったものだと画像から人物の顔を検出してその部分にモザイクをかけるといったことも可能。
import cv2
face_cascade = cv2.CascadeClassifier('/Users/U/Downloads/haarcascade_frontalface_default.xml')
src = cv2.imread('/Users/U/Downloads/face2.jpg')
img_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(img_gray)
for (x, y, w, h) in faces:
small = cv2.resize(src[y:y+h, x:x+w], None, fx=0.01, fy=0.01, interpolation=cv2.INTER_NEAREST)
src[y:y+h, x:x+w] = cv2.resize(small, (w, h), interpolation=cv2.INTER_NEAREST)
cv2.imwrite("/Users/U/Downloads/output.png", src)
cascadeファイルがあればそれを使って人物の検出なんかを行うことができるから割と楽です。
画像処理でありそうなものだと画像のサイズを一括でこのサイズにしたい、トリミングしたいっていう場合とかですかね。一度プログラムを作ってしまえば実行するだけで実行してくれるから作業は楽になるはず。
Pythonで画像認識を自動化する
プログラムに画像認識をさせることもできます。例えば猫の顔を認識させてそれを四角く加工とか。
import sys
import cv2 as cv
def detect(imagefilename, cascadefilename):
srcimg = cv.imread(imagefilename)
if srcimg is None:
print('cannot load image')
sys.exit(-1)
dstimg = srcimg.copy()
cascade = cv.CascadeClassifier(cascadefilename)
if cascade.empty():
print('cannnot load cascade file')
sys.exit(-1)
objects = cascade.detectMultiScale(srcimg, 1.1, 3)
for (x, y, w, h) in objects:
print(x, y, w, h)
cv.rectangle(dstimg, (x, y), (x + w, y + h), (0, 0, 255), 2)
return dstimg
if __name__ == '__main__':
result = detect('/Users/U/Downloads/cats.jpg', '/Users/U/Downloads/cascade.xml')
cv.imwrite('/Users/U/Downloads/result.jpg', result)
参考Qiita:OpenCVで猫検出 (モデル配布)
分類器とOpenCVを使えばこういうことはできてしまいます。こういった画像分類ができるなら自動でこういったことができる。
- 人物の顔が写っている画像を判定する
- 猫が写っている画像を判定する
このフォルダにある画像ファイルから人間が写っている画像を抜き出したいとかっていう時に便利ですね。
Pythonでスプレッドシート作業を自動化する
スプレッドシートの読み込みや書き込みやpythonを使って行うことができる。GoogleCloundPlatformで設定をしてPythonがスプレッドシートにアクセスできるように認証鍵を取得してないといけないのが面倒だけど・・・
スプレッドシートの編集はgspreadというライブラリを使って行うことができる。スプレッドシートへの書き込みができるなら、例えば定期的にデータを取得してスプレッドシートにデータを書き込むっていうことも可能。
ただスプレッドシートの自動化を行うならGoogleAppsScriptを使うのが簡単だと思うから、単にスプレッドシートの作業を効率化したいならそっちをおすすめします。
GoogleAppsScriptにはトリガーっていうのもあって、それを使えば定期的にプログラムを実行するっていうことができます。データを取得して書き込むっていう処理があれば、それを定期的に実行することができるというやつですね。
Pythonでメール作業を自動化する
メール送信のコードを書けばメールを送信することができる。ちょっとGmailで試してみると送ることができました。
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
ACCOUNT = "ログインメールアドレス"
PASSWORD = "パスワード"
FROM = "送信元アドレス"
TO = "送信先アドレス"
def build_message(from_ad, to, sub, body):
msg = MIMEText(body)
msg['Subject'] = sub
msg['From'] = from_ad
msg['To'] = to
msg['Date'] = formatdate()
return msg
def send_mail(msg):
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login(ACCOUNT, PASSWORD)
server.send_message(msg)
server.quit()
msg = build_message(FROM, TO, "テスト", "テストだよ")
send_mail(msg)
ただGmailの設定で安全性を低いものにしないと送ることができないのが面倒。
これはGmailでやったけどGmailでこういったことをするならGoogleAppsScriptでやってしまう方がやりやすいです。実行環境は用意ししてくれるし、Gmailを呼び出すコードも用意されています。
スプレッドシートに記載されたメールアドレスに送信するっていうこともできたりするから、使い方によっては作業の手間が楽になるはず。
Pythonでファイル処理を自動化する
ファイル操作を自動化するっていうのはイメージしやすいかもしれません。
- 指定した拡張子のファイルを削除する
- 指定したファイルの名称を変更する
- ファイルに書き込み
- ファイルのコピー
- ファイルの作成
- ・・・
ファイルのさまざまな操作をすることができる。ただファイル操作を自動化して何かするってなんでしょう?こんなことができそうですね。
- 議事録のファイルを指定した曜日で自動生成
- ファイルを指定したフォルダに移動させる
- 一定期間経過したファイルは削除
- スクリーンショットは削除
cronを使って定期的に実行するようにすれば、1日の終わりに自動で実行するっていうこともできる。(パソコンに設定するcronの場合はパソコンが起動している間限定だけど)
コードを1から書かなくてもMacのAutomatorやWindowsのPowerAutomateDesktopなんかでも自動化はできるね。
Pythonでフォルダ作成を自動化する
ファイル作成時たらフォルダ作成ですよね。普通にTerminalからmkdirで作れるし、シェルスクリプトでいいじゃんと思うかもしれないけどpythonでも短く作れる。
import os
path = '/Users/U/Documents/files/sub-files'
# filesとsub-filesフォルダは存在しない前提。
os.makedirs(path)
これを実行するとこんなふうにfilesとsub-filesフォルダが作成される。
作成したフォルダの中にファイルを入れたいっていうこともできるから、定期的にフォルダ作成してファイルも作成したい場合は便利かもしれない。
ファイルとフォルダに関しては結構簡単にできると思うから、仕事なんかで使えそうなら使ってみるといいかもしれないですね。
PythonでPDF作業を自動化する
PDFの扱いって面倒ですよね。ページが分かれていたり編集しづらかったりと悩みものです。そんなPDFもプログラムの力でこういったことをすることができる。
- ファイルをPDFに変換
- PDFに透かしを入れる
- PDFからテキストを読み取る
- PDFファイルを画像ファイルに変換
- ・・・
例としてPDFファイルを画像ファイルに変換するっていうことをやってみる。
from pathlib import Path
from pdf2image import convert_from_path
# PDFファイルのパス
input_path = Path("/Users/U/Documents/hoge.pdf")
#outputのファイルパス
output_path=Path("/Users/U/Documents/output")
convert_from_path(pdf_path=input_path, output_folder=output_path,fmt='jpeg',output_file=input_path.stem)
これを実行すると指定したフォルダにPDFファイルが画像ファイルに変換されたものが生成される。
これは直接PDFのファイル名を指定しているけど、フォルダ名を指定してその中にあるPDFファイルを全て画像ファイルに変換するっていうこともできそうですよね。
PDFの扱いが面倒ならpythonで色々いじってしまうのもありですね。
自動化するのに便利なCronやトリガー
プログラムを使って作業を自動化するにしても上で紹介したのはプログラムを実行するだけで処理を行うっていうことだけです。確かにプログラムを実行するだけでできるのは便利だけど自動化というなら何もしないで実行してほしい。
そうしたことをするなら以下のような方法があります。
- Cronを使って定期的に実行する
- GoogleAppsScriptのトリガーを使う
GoogleAppsScriptのトリガーはGoogleAppsScriptに対して使うものだから、Pythonと組み合わせることはできないけどうまく考えれば何か組み合わせてできそうな気がする。
パッと浮かぶのはCronですよね。
毎週月曜12時にこのファイルを実行する
こういうことができるようになるからCronは便利です。
CronはAWSやGCPなどでサーバーを借りれば使えます。レンタルサーバーやVPSでもいけるし、MacならUnixだから使えますね。
プログラムを使わずに自動化をするなら
プログラムを書くことはしんどいけど、書かずに自動化ってできないのかな?って思う方もいるかもしれません。ですがWebサービスやChromeの拡張機能を使ってある程度の自動化っていうのはできてしまいます。
プログラムを使わずにそういったことがしたい方は以下の記事を参考にしてみてください。
ただやっぱり自分でコードを書いた方が自動化の柔軟性はかなり高いから、自動化が複雑になればなるほどできないことは増えてくるはずです。
Pythonを学んでプログラムで自動化をできるようにする
プログラムを使って自動化をしたかったら、プログラミングを学ばなくてはなりません。独学で学ぶのは効率が悪いので誰かに聞ける環境を作って勉強するのがおすすめです。
以下の記事で安く学ぶことのできるサブスク型のプログラミングスクールを紹介しているので気になったら見てみてください。