from bs4 import BeautifulSoup
import
requests
user = 'hogehoge' ※ログインに必要な送信内容
pwd = 'foofoo' ※送信内容はもっとある場合もあります([F12]で確認)
session =
requests.session() ※セッションを開始
login_info = {
'username':user,
'password':pwd
} ※送信する内容を辞書型に格納
url = 'http://localhost/cake3x/users/login' ※ログインページを指定
res =
session.
post(
url,
login_info) ※ログインする
res.raise_for_status() ※エラーの場合は例外を発生させられる
url = 'http://localhost/cake3x/' ※実際にスクレイピングしたい URL
res =
session.
get(
url) ※ログインが成功した session を使いページにアクセスできる
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser') ※あとは、普通に解析できます。
【メモ】
エラーの際の res.raise_for_status() は、別にログインに失敗したとかではなく、何らかのシステムエラーの場合です。
ログイン後、BeautifulSoup で解析する場合の第1引数は、取得した変数.text となるので注意!
サーバーに送信されている情報を確認するには、ブラウザの解析ツールを使います。
まずログイン画面で [F12] から解析ツールを開きます。
ツール -> Network タブを表示し、実際にログインします。
するとブラウザが受信した一覧が表示されますので、ログイン画面の URL を選択します。
ツール -> Headers タブ内の Form Data が送信された内容となります。
表示例)
_method: POST
username: hogehoge
password: foofoo
【その他のメソッド】
url = 'https://www.uniqlo.com/jp/store/feature/uq/new/women/'
url = 'https://im.uniqlo.com/images/jp/pc/goods/416875/item/72_416875_middles.jpg'
requests.get(url).text
※レスポンスのボディ部分が格納されています。ボディは自動的に unicode 化されている
requests.get(url).content
※レスポンスボディの bytes 形式でのデータが格納されています。
※どちらを使えば良いかわからないが、HTMLをパースする場合は text で、画像のバイナリデータを取得する時は content が良いかも。。