令和5年度のDPCの退院患者調査が公表された。
令和5年度DPC導入の影響評価に係る調査「退院患者調査」の結果報告について|厚生労働省
ファイルをダウンロードするのは恒例行事。
10年前は、ぽちぽちリンクをクリックして、1つ1つファイル名を変えていた。
5年くらい前からは、pythonのプログラムで、URL取得・ファイルダウンロード・ファイル名変更を行うようにした。
今年も、そのプログラムで作業は終わったのだが、生成AIで、同じような依頼をしたら、ものの10秒でプログラムが出てきた。「ファイル名から括弧書きのファイルサイズを除いて」などの改良を少しだけ追加でお願いしただけだ。
import os
import re
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
# 対象のURL
base_url = 'https://www.mhlw.go.jp/stf/shingi2/newpage_00137.html'
# 保存先ディレクトリ
download_dir = 'downloaded_files'
os.makedirs(download_dir, exist_ok=True)
# ファイル名の特殊文字と不要な情報を削除する関数
def sanitize_filename(text):
# [***KB] や [***MB] の表記を削除(全角・半角両方対応)
text = re.sub(r'[\[[].*?(KB|MB)[\]]]', '', text)
# ファイル名に使えない文字を削除
text = re.sub(r'[\\/*?:"<>|]', '', text)
return text.strip() # 前後の空白を削除
# ウェブページを取得
response = requests.get(base_url)
response.raise_for_status()
# BeautifulSoupで解析
soup = BeautifulSoup(response.content, 'html.parser')
# PDFなどのリンクを抽出してダウンロード
for link in soup.find_all('a', href=True):
href = link['href']
link_text = link.get_text(strip=True) # リンクテキストを取得
if not link_text:
continue # テキストがないリンクはスキップ
file_ext = os.path.splitext(href)[-1] # ファイルの拡張子を取得
if file_ext.lower() in ['.pdf', '.xlsx', '.xls', '.docx', '.zip']: # 必要な拡張子のみ処理
file_url = urljoin(base_url, href)
safe_filename = sanitize_filename(link_text) + file_ext # 安全なファイル名を作成
file_path = os.path.join(download_dir, safe_filename)
# ファイルをダウンロードして保存
with requests.get(file_url, stream=True) as file_response:
file_response.raise_for_status()
with open(file_path, 'wb') as file:
for chunk in file_response.iter_content(chunk_size=8192):
file.write(chunk)
print(f'{file_path} をダウンロードしました。')
動作させてみたが、エラーが出ることもなく、ほぼ完璧(気がついた問題点は「(1)集計条件」のPDFはファイル名が重複して上書きされてしまうくらい)。そういうわけで、自分の仕事は無くなった。喜ぶべきか、悲しむべきか。残念ながら、自分レベルのプログラマーは、ほぼ価値がないだろう(VScodeでContinueを使って・・・といったことで業務に使うどころか、chatGPTで聞くだけで十分になっている。上のコードはchatGPTの返答)
ただコードを書くだけではほぼ価値のない世界で、いかに価値を生み出すかが勝負になったことを考えると、生半可な気持ちでは、早々に飯が食えなくなるということだろう。