ログインが必要なサイトをPythonでスクレイピング

PythonライブラリのBeautifulSoup4とrequestsを使い、ログイン先のHTMLソースを取得します。



環境

Pythonの実行環境が無い方は、「Colaboratory」での実行をおすすめします。

必要な情報

ログイン後のhtmlを取得する場合、
URLを叩く際に、Webサーバへ以下の情報を送る必要があります。
・クッキー情報
・POSTパラメータ(ログインID、パスワード、トークンなど)

渡す必要のあるPOSTパラメータは、ログイン画面のソースを見ることで判断できます。
<form method=”POST”>の中の、「name」属性があるタグの「value」属性の情報が必要となります。

<form method="POST" action="/login">
 <input type="hidden" name="_token" value="06OM24DHZ02FjwLkjmOUoJF4lXa3ruLx0c">
 <div>E-Mail Address <input name="email"></div>
 <div>Password <input name="password"></div>
 <div><button type="submit" class="btn btn-primary"> Login </button></div>
</form>

または、ブラウザで通常のログインをする時に、デベロッパツールで確認することもできます。

プログラム実行

# ライブラリをインストール
pip install requests
pip install BeautifulSoup4

# モジュール読み込み
import requests
from bs4 import BeautifulSoup

# ログインページのURLから、BeautifulSoupオブジェクト作成
url = "https://sitepage.jp/login"
session = requests.session()
response = session.get(url)
bs = BeautifulSoup(response.text, 'html.parser')

# クッキーとトークンを取得
authenticity = bs.find(attrs={'name':'_token'}).get('value')
cookie = response.cookies

# ログイン情報
info = {
    "_token": authenticity,
    "email": "メールアドレス",
    "password": "ログインパスワード",
}

# URLを叩き、htmlを表示
res = session.post(url, data=info, cookies=cookie)
print(res.text)

ログイン先のソースが表示されれば成功です。
BeautifulSoupでデータを整形して、便利な収集ツールを作成してみてください。

» エンジニア登録はこちら