【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でログイン処理が実装されてたりする場合には、少し頑張って探す必要はありそうですね。