日常的に使っていて、このブログでも紹介したことのある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/