自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

  • 複数のPDFファイルを1つのPDFファイルにまとめる

    書類(PDF)を1つにまとめる必要が出てきたので。 複数のPDFを1つにまとめるPythonコードを作ることにした。 前提 pip install PyPDF2==3.0.1 ソースコード PyPDF2 をインストールしておく。 PyPDF2 では PdfFileMerger は削除されたため、 PdfMerger を使う。 import glob import datetime from PyPDF2 import PdfMerger now = datetime.datetime.now() now_str = now.strftime("%Y-%m-%d_%H:%M:%S") # TIPS: 既存のPDFファイル名を指定した場合、上書きではなく、追記されるので注意。 def merge_pdfs(output_filename=f"{now_str}.pdf"): # すべてのPDFファイルを取得。 # ファイル名順に並び替える。 pdfs = sorted( glob.glob(f"./*.pdf") ) #print(pdfs) if not pdfs: print(& ...
  • 【Ubuntu】systemdでPythonファイルを動作させる【常駐スクリプトに】

    このPythonコードを動作させる。ファイルパスは~/Documents/systemd/test.py import datetime, time while True: with open("test.txt", mode="w") as f: f.write( str(datetime.datetime.now()) ) time.sleep(1) 必要最小限度の serviceファイルが以下。ファイルパスは/etc/systemd/system/testpython.serviceとする。 [Unit] Description=write text file After=network.target [Service] ExecStart=/usr/bin/python3 test.py WorkingDirectory=/home/testuser/Documents/systemd [Install] WantedBy=multi-user.target 下記で動作できる。 sudo systemctl start testpython.service 動作中は/home/testuser/Documents/systemd/te ...
  • 【Python】def関数に、PHPやJavaScriptでよく見るアロー関数(->)っぽいものはアノテーション

    例えば、以下の関数があったとする。 def test(name:str) -> str: return name print( test("taro") ) print( test(12) ) これは文字列を受け取って文字列を返す関数である。 ただし、上記のように文字列型じゃない型を受け取っても正常に動作はする。 あくまでも注釈として利用することができる。関数の機能自体に影響はない。 参照元 https://docs.python.org/ja/3.6/library/typing.html https://magazine.techacademy.jp/magazine/46675 https://program-shoshinsya.hatenablog.com/entry/2020/09/09/230633 ...
  • 【Selenium】webdriver-managerを使ってPythonコードからChromeドライバーをインストールする

    前もってwebdriver-managerをインストールしておく。 pip install webdriver-manager 下記コードでChromeドライバーが簡単にインストールできる。 from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get("https://www.google.com/") どうやらvirtualenvではなくOSに直インストールされるようだ。 ...
  • 【Selenium X Python】フォーム入力やクリックをする時は明示的な待機をする【Webdriverwait】

    Seleniumでブラウザ操作の自動化をする時、クリックやフォーム入力などは頻繁に行われる。 だが、それがもしtimeモジュールを使用した暗黙的待機の場合、動作に再現性はなく、たびたび不具合に見舞われるだろう。 本記事では、再現性を高めるため、明示的な待機を行うWebdriverwaitを使用したクリックとフォーム入力を行う。 前提 使用しているPythonとライブラリのバージョン、ブラウザなどをまとめる ...
  • 【BeautifulSoup】imgタグをスクレイピングして画像をダウンロードする

    DoS攻撃になってしまうので、ダウンロードのたびに1秒待つようにしたほうが良いだろう。 import requests,bs4,time result = requests.get("https://noauto-nolife.com/") soup = bs4.BeautifulSoup(result.content, "html.parser") elems = soup.select("img") count = 0 for elem in elems: url = elem.get("src") result = requests.get(url) #バイナリで書き込み with open(str(count)+".png", "wb") as f: f.write(result.content) count += 1 #1秒待機する(DoS攻撃になってしまうため) time.sleep(1) ...
  • 【BeautifulSoup】属性を取得する【class,src,valueなど】

    BeautifulSoupにて、属性を取得する。 import requests,bs4 result = requests.get("https://noauto-nolife.com/") soup = bs4.BeautifulSoup(result.content, "html.parser") elems = soup.select("img") for elem in elems: #src属性を取得(文字列型) print(elem.get("src")) #alt属性を取得(文字列型) print(elem.get("alt")) #属性値が複数なら、リストで取得できる print(elem.get("class")) #存在しない属性はNoneが返ってくる print(elem.get("hoge")) ...
  • 【Python】virtualenvをactivateせずに、venvにインストールしたライブラリを読み込んで実行する【aliasやcrontabなどに】

    例えば、システムに直インストールするわけには行かないPythonライブラリを使うとする。 そういう時はvirtualenvを使って仮想開発環境を作り、そこにactivateしてインストールするとよいだろう。 だが、crontabやaliasなどで実行する場合はどうだろうか?ワンライナーで実行するにはactivateするわけには行かない場合もある。 そういう時は、このように実行するとよいだろう。 venv/bin/python test.py これで ...
  • 【Python】openpyxlで棒グラフ・折れ線グラフを表示させる【公式から引用】

    コードは公式から引用し、一部編集している https://openpyxl.readthedocs.io/en/stable/charts/bar.html https://openpyxl.readthedocs.io/en/latest/charts/line.html ソースコード from openpyxl import Workbook from openpyxl.chart import BarChart, Reference #書き込みモードでワークブックを作る wb = Workbook(write_only=True) #シートを作る ws = wb.create_sheet() #データ rows = [ ['番号', '算数', '国語'], [1, 50, 70], [2, 60, 30], [3, 40, 60], [4, 50, 70], [5, 20, 40], [6, 60, 40], [7, 50, 30], ] #書き込み for row in rows: ws.append(row) #棒グラフを作る chart1 = BarChart() chart1.type = "col" chart1.style = 10 #タイトル、横軸・縦軸の指定 chart1.title = "グラフタイトル" chart1.y_axis.title = "点数" chart1.x_axis.title = " ...
  • 【Python】気象庁のサイトから特定の都市の月ごとの平均気温をスクレイピングする

    気象庁のサイトで都市の月ごとの平均気温を表示させる 下記サイトへ行く。 https://www.data.jma.go.jp/obd/stats/etrn/index.php 地点を選択 月ごとの値を表示する 下記画像の1で地点を選ぶ、続いて月ごとの値を表示する これで問題のページにたどり着く https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=&month=&day=&view= 今回はこれをスクレイピングする。 ソースコード import requests, bs4 URL = "https://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?prec_no=44&block_no=47662&year=&month=&day=&view=" #サイトへアクセス result = requests.get(URL) #構文解析(※ブラウザに表示されているHTMLとrequestsとBeautifulSoupで取得したHTMLは異なる場合がある。) soup = ...