requestsを使って、GETでアクセスすると自動的にリダイレクトされる

日常的に使っていて、このブログでも紹介したことのあるrequestsの話です。
参考:requestsを使って、Webサイトのソースコードを取得する

これまで意識せずに使っていたのですが、requestsでgetすると、リダイレクトがあるページの場合、
自動的にリダイレクトされます。
ドキュメントにもはっきり書いてありますね。
リダイレクトと履歴

例えば、このブログはhttpでアクセスすると、httpsのurlにリダイレクトする設定になっています。
そのため、以下のコードは、”https://analytics-note.xyz/” ではなく、
そこからリダイレクトされて、”https://analytics-note.xyz/”にアクセスします。


import requests
url = "https://analytics-note.xyz/"
response = requests.get(url)
print(response.status_code)
print(response.url)

# 以下出力
200
https://analytics-note.xyz/

status_codeがリダイレクトの302ではなく、200になることや、
urlがhttpsの方に書き換えられていることがわかります。

ちなみにリダイレクトされたページへのアクセス結果は、Responseオブジェクトの、historyというプロパティに、
Responseオブジェクトの配列として格納されます。
今回リダイレクトは1回でしたが、複数回に及ぶ可能性もあるので配列で格納されているようです。


print(response.history)
# 出力
[<Response [302]>]

この自動的にリダイレクトしてくれる仕組みはデータ収集等では非常に便利なのですが、
作業の目的によっては逆に不便です。

リダイレクトして欲しくない時は、allow_redirectsという引数にFalseを渡すことでリダイレクトを禁止できます。


response = requests.get(url, allow_redirects=False)
print(response.status_code)
print(response.url)

# 以下出力
302
https://analytics-note.xyz/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です