背景
製薬会社は医薬品の研究開発において、多くの法律や規制に縛られています。その発信元は、厚生労働省や医薬品医療機器総合機構(PMDA)など多岐にわたります。日々大小の通知が発信されていて、通知のPDFはPRAISE-NETがサービスとして配信しています。配信はメール媒体で、PDFが添付されているわけではなく、PDFのリンクが張り付けられているのみの簡素なものです。それをもとにPDFをダウンロードする必要が出てきたので、作りました。使いたい人は、勝手に使ってください。
コード
import requests
from bs4 import BeautifulSoup
import os
# セッションを開始
session = requests.Session()
# payload : ログイン情報
# user_login_idとpassword書き換える
# doInputはたぶんいらないけど、残しておいた。要らなければ消してもOK。
payload = {
"user_login_id":"各自のメールアドレス",
"password" :"各自のパスワード",
"doInput":"ログイン"
}
# PRAISE-NETにログインするのにTWORDというデータが必要。
# このデータをpayloadに加える。
r = session.get("https://www.praise-net.jp/pn/m/login.asp")
soup = BeautifulSoup(r.text,"lxml")
auth_token = soup.find(attrs={'name': 'TWORD'}).get('value')
payload['TWORD'] = auth_token
# ログインする
url_login = "https://www.praise-net.jp/pn/m/login.asp?path="
p = session.post(url_login, data=payload)
# エラーが出れば、ここで弾かれる。
p.raise_for_status()
# PDFをダウンロードする。
# https://www.praise-net.jp/pn/m/p.asp?i=p/20181430.pdf ← 試しにこれをダウンロードしてみるとよい。
res = session.get("PDFのURL",stream=True,data=payload)
# PDFの保存
# ファイル名はURLの末尾の数字になる。
with open(os.path.basename("PDFのURL"),"wb") as file:
for chunk in res.iter_content(chunk_size=1024):
file.write(chunk)
# forで回すなら、処理が終わったら一秒待つコードを追加するべき?
# import time
# time.sleep(1)
このコードだけだとファイルは当然一つだけしかダウンロードされないので、for文で回してください。今後、praise-netのホームページが改修されて、HTMLのinputのnameが変更されていたら、payloadのkeyを変更してください。