【PythonでWEBスクレイピング】ログインが必要な情報を取得する
今回は、ログイン後のWEBサイトの情報を取得してみることにする。
必要な情報を調べる
ログイン後のWEBページを取得するためには、ログイン処理を実装しなければならない。その準備として、ログイン時にどのようなパラメータが送信されているかを知る必要がある。IDやパスワードのような値はもちろんのこと、tokenのような隠された値が必要になることも多い。
<form name="loginform" id="loginform" method="post" action="/login">
<input type="text" name="log" id="user_login" class="input" value="" size="20" autocapitalize="none"
autocomplete="username" required="required">
<input type="password" name="pwd" id="user_pass" class="input password-input" value="" size="20"
autocomplete="current-password" spellcheck="false" required="required">
<input name="rememberme" type="checkbox" id="rememberme" value="forever"> <label
for="rememberme">ログイン状態を保存する</label>
<input type="submit" name="submit" id="submit" class="button button-primary button-large" value="ログイン">
</form>
このようなログインフォームであったとする。余計な情報がまだ多いので、さらに削ぎ落としたものがこちら。
<form method="post" action="/login">
<input name="log" required="required">
<input name="pwd" required="required">
<input name="rememberme" type="checkbox">
<input type="submit" name="submit" value="ログイン">
</form>
「log」「pwd」がIDとPASSWORD。「rememberme」がログイン状態を保存しますか?というチェックボックス。「submit」はログインボタンそのものだ。これらの値があればログイン出来そうだという目処をつける。
ではPythonに戻ろう。
ログイン処理の実装
先ほど、調べた必要な値を使って、ログインを実装する。本ブログのログインを利用してログイン可能か試してみた。
from bs4 import BeautifulSoup
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}
url_login = "https://supilog.supisupi.com/wp-login.php"
url="https://supilog.supisupi.com/wp-admin/edit.php"
session = requests.session()
payload = {
"log": "Supi",
"pwd": 'hogehoge',
"rememberme": 0
}
response = session.post(url_login, data=payload)
response.raise_for_status()
response = session.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.select('#the-list tr .row-title')
for title in titles:
print(title.text)
【PythonでWEBスクレイピング】ヘッダ情報を付与する 【PythonでWEBスクレイピング】基本の使い方 【ルービックキューブのタイマーを作る】第9回 キューブの展開図にスクランブル情報を適用させる回 【ルービックキューブのタイマーを作る】第8回 グラフ化してみる回 【ルービックキューブのタイマーを作る】第7回 保存した記録を表示する回 【ルービックキューブのタイマーを作る】第6回 IndexedDBでタイムを保存してみる回 【ルービックキューブのタイマーを作る】第5回 IndexedDBを使ってみる回 ...
まとめ
ログイン後のソースコードから情報を取得することができました。ログイン処理等が実装できると、出来ることの幅が増えますね。
必要なパラメータを調査する作業が重要な点で、JavaScriptでログイン処理が実装されてたりする場合には、少し頑張って探す必要はありそうですね。