在 Python 3.5 中使用 urllib 获取网页的最终重定向

Posted

技术标签:

【中文标题】在 Python 3.5 中使用 urllib 获取网页的最终重定向【英文标题】:Using urllib to get the final redirect of a webpage in Python 3.5 【发布时间】:2017-12-08 01:37:09 【问题描述】:

在this post 中,我尝试将网页的最终重定向为:

import urllib.request
response = urllib.request.urlopen(url)
response.geturl()

但这不起作用,因为我在尝试使用 urlopen 时收到“HTTPError: HTTP Error 300: Multiple Choices”错误。

请参阅这些方法的文档here。

编辑:

这个问题与Python: urllib2.HTTPError: HTTP Error 300: Multiple Choices 的问题不同,因为它们跳过了导致错误的页面,而我必须获得最终目的地。

【问题讨论】:

为什么不使用 requests 库?处理这种情况要容易得多 Python: urllib2.HTTPError: HTTP Error 300: Multiple Choices的可能重复 @mx0 该帖子解决了同样的问题,但是当他们跳过重定向页面时,我实际上必须点击链接并获得最终目的地。 【参考方案1】:

按照@abccd 的建议,我使用了requests 库。所以我将描述解决方案。

import requests

url_base = 'something'  # You need this because the redirect URL is relative.
url = url_base + 'somethingelse'

response = requests.get(url)

# Check if the request returned with the 300 error code.
if response.status_code == 300:
    redirect_url = url_base + response.headers['Location']  # Get new URL.
    response = requests.get(redirect_url)  # Make a new request.

【讨论】:

以上是关于在 Python 3.5 中使用 urllib 获取网页的最终重定向的主要内容,如果未能解决你的问题,请参考以下文章

Python - 使用 Python 3 urllib 发出 POST 请求

python3.5中没有urllib2怎么处理?

python爬虫 urllib库基本使用

urllib.request.Request

Python 3.5.1 urllib 没有属性请求

python3 urllib.parse 常用函数