Библиотека запросов Python перенаправляет новый URL-адрес
Я просматривал документацию Python Requests, но я не вижу никакой возможности для того, чего я пытаюсь достичь.
В моем script я устанавливаю allow_redirects=True
.
Я хотел бы знать, была ли перенаправлена страница на что-то еще, что такое новый URL.
Например, если начальный URL был: www.google.com/redirect
И последний URL-адрес www.google.co.uk/redirected
Как мне получить этот URL?
Ответы
Ответ 1
Вы ищете историю запросов.
Атрибут response.history
- это список ответов, которые привели к окончательному URL-адресу, который можно найти в response.url
.
response = requests.get(someurl)
if response.history:
print "Request was redirected"
for resp in response.history:
print resp.status_code, resp.url
print "Final destination:"
print response.status_code, response.url
else:
print "Request was not redirected"
Демо:
>>> import requests
>>> response = requests.get('http://httpbin.org/redirect/3')
>>> response.history
(<Response [302]>, <Response [302]>, <Response [302]>)
>>> for resp in response.history:
... print resp.status_code, resp.url
...
302 http://httpbin.org/redirect/3
302 http://httpbin.org/redirect/2
302 http://httpbin.org/redirect/1
>>> print response.status_code, response.url
200 http://httpbin.org/get
Ответ 2
Это ответ на несколько другой вопрос, но поскольку я сам застрял в этом, я надеюсь, что это может быть полезно для кого-то другого.
Если вы хотите использовать allow_redirects=False
и перейти непосредственно к первому объекту перенаправления, а не следовать цепочке из них, и вы просто хотите получить место перенаправления непосредственно из объекта ответа 302, тогда r.url
выиграл Не работай. Вместо этого он заголовок "Местоположение":
r = requests.get('http://github.com/', allow_redirects=False)
r.status_code # 302
r.url # http://github.com, not https.
r.headers['Location'] # https://github.com/ -- the redirect destination
Ответ 3
В документации есть этот рекламный блок http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history
r = requests.get('http://www.github.com')
r.url
#returns https://www.github.com instead of the http page you asked for
Ответ 4
Я думаю, что request.head вместо request.get будет более безопасно звонить при обработке перенаправления URL-адресов, проверьте проблему github здесь:
r = requests.head(url, allow_redirects=True)
print(r.url)
Ответ 5
Для python3.5 вы можете использовать следующий код:
import urllib.request
res = urllib.request.urlopen(starturl)
finalurl = res.geturl()
print(finalurl)