環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

【PythonでWEBスクレイピング】ログインが必要な情報を取得する

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