##背景
とあるサイトからPDFをダウンロードするために、そのサイトにIDとパスワードを入力する必要があった。
参考にした記事がいくつかある。
Pythonでのウェブサイトへのログイン
【Python3】ログイン機能付サイトでスクレイピング【requests】【BeautifulSoup】
Pythonのrequestsモジュールでログインしようとしたらうまくいかなかった話
本命のサイトではまだ試していないが、「小説家になろう」にログインすることに成功した。注意点を含めてコードを載せる。
import requests
# メールアドレスとパスワードの指定
USER = "各個人のID"
PASS = "各個人のパスワード"
# セッションを開始
session = requests.Session()
# ログイン情報
login_info = {
"narouid":USER,
"pass":PASS
}
#htmlにあるformタグを考慮したURL
url_login = "https://ssl.syosetu.com/login/login/"
p = session.post(url_login, data=login_info)
#ブラウザに表示されているURL
r = session.get("https://ssl.syosetu.com/login/input/")
ログインするためには二つのURLが必要になる。
一つはログインページのブラウザに表示されているURL。
もう一つはhtmlの form action="xxx" method="post" の部分を考慮したURL。
小説家になろうにあるformタグのコードは
<!-- URL -->
<form action="/login/login/" method="post">
<dl>
<dt>IDまたはメールアドレス</dt>
<!-- ID -->
<dd><input name="narouid" type="text">
</dd>
<dt>パスワード</dt>
<dd>
<!-- password -->
<input size="20" name="pass" type="password"><br>
このようになっている。
ログイン情報をPOSTするURLは、小説家になろうだと、末尾に/login/login/で書き換えないといけない。
ログインページのURLが
前:https://ssl.syosetu.com/login/input/
後:https://ssl.syosetu.com/login/login/
と変更しないと、ただしくデータが送信されない。
IDとパスワードのinputタグのnameが正しいことを確認して、再度https://ssl.syosetu.com/login/input/ でアクセスすれば、ログインできているはずである。
大切なのはPOSTするURLとログインするURLが異なることに注意することだと思う。