1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PRAISE-NETの医薬品関連の通知PDFをダウンロードする

Posted at

背景

製薬会社は医薬品の研究開発において、多くの法律や規制に縛られています。その発信元は、厚生労働省や医薬品医療機器総合機構(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を変更してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?