今回は自分が登録しているサイトのログインページにアクセスしてログインして適当なページのURLを取得する方法のメモになります。
Contents
注意点
ログインページにreCAPTCHAがある場合は対応していません。
requestsライブラリとbeautifulsoup4ライブラリをインストール
下記のコマンドを叩きます。
pip install requests
pip install beautifulsoup4
requestsライブラリは主に下記のことができます。
- WebページのHTMLやJSONデータを取得(requests.get())
- フォームを送信(requests.post())
- セッションを維持(requests.Session())
今回は上記の3つを使います。
beautifulsoupは主に下記のことができます。
- HTMLやXMLを解析して、特定の要素を抽出
- フォームの入力値(例:CSRFトークン)を取得
今回は上記の2つを使います。
requestsライブラリ・beautifulsoupライブラリを使う為の記述
下記の記述をします。
import requests
from bs4 import BeautifulSoup
sessionを使えるようにする
ページ遷移をした時に情報を維持しないといけないのでsessionを使えるようにします。
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session() //この行を追加
ヘッダーの記述
これがないとログインができないみたいです。
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
//ここから追加
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "ログインページのURL"
}
//ここまで追加
9行目はどのブラウザやデバイスからのアクセスかを判定します、一部のサイトではこれがないとアクセスを拒否される場合があるみたいです。
10行目は一部のサイトではサイトのログインページからログインしないとアクセスを拒否されるのですがこの記述があることでサイトのログインページからログインしようとしているのを伝えることができます。
ログインページにアクセスしてHTMLを取得
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "ログインページのURL"
}
//ここから追加
login_url = "ログインページのURL"
response = session.get(login_url, headers = headers)
soup = BeautifulSoup(response.text, 'html.parser')
//ここまで追加
14行目でログインページにアクセスして15行目でログインページのHTMLを取得しています。
「response.text」が取得したHTMLでhtml.parseはHTMLを解析するエンジンです。
csrfトークンの取得
csrfトークンは不正アクセスを防ぐ為に必要になります。
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "ログインページのURL"
}
login_url = "ログインページのURL"
response = session.get(login_url, headers = headers)
soup = BeautifulSoup(response.text, 'html.parser')
//ここから追加
csrf_token_tag = soup.find('input', {'name': '_token'})
if csrf_token_tag:
csrf_token = csrf_token_tag['value']
else:
csrf_token = None
exit()
//ここまで追加
17行目はHTMLの中で「name=”_token”」を持つinputタグを探して20行目でcsrfトークンを取得します。
ログイン
ログインできるようにします。
ログインに使うのは今回はメールアドレスとパスワードです。(サイトによって異なると思います)
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "ログインページのURL"
}
login_url = "ログインページのURL"
response = session.get(login_url, headers = headers)
soup = BeautifulSoup(response.text, 'html.parser')
csrf_token_tag = soup.find('input', {'name': '_token'})
if csrf_token_tag:
csrf_token = csrf_token_tag['value']
else:
csrf_token = None
exit()
//ここから追加
payload = {
"email": "ログインユーザーのメールアドレス",
"password": "ログインユーザーのパスワード",
"_token": csrf_token
}
session.post(login_url, data = payload, headers = headers)
//ここまで追加
25行目〜29行目はログインに使う情報です。
26行目はメールアドレスで27行目はパスワードで28行目はcsrfトークンです。
ログイン後に特定のページのURLを取得
今回は特定のページのURLを取得します。
下記の記述をします。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
"Referer": "ログインページのURL"
}
login_url = "ログインページのURL"
response = session.get(login_url, headers = headers)
soup = BeautifulSoup(response.text, 'html.parser')
csrf_token_tag = soup.find('input', {'name': '_token'})
if csrf_token_tag:
csrf_token = csrf_token_tag['value']
else:
csrf_token = None
exit()
payload = {
"email": "ログインユーザーのメールアドレス",
"password": "ログインユーザーのパスワード",
"_token": csrf_token
}
session.post(login_url, data = payload, headers = headers)
//ここから追加
mypage_url = "ログイン後にアクセスしたページのURL"
response = session.get(mypage_url, headers = headers)
print("ログイン後のページURL:", response.url)
//ここまで追加
これで完成です。