在Python中确定重定向的URL

Mis*_*erU 6 python redirect parsing

我使用HTMLparser制作了一个小解析器,我想知道链接重定向的位置.我不知道如何解释这个,所以请看这个例子:

在我的页面上,我有一个关于源的链接:http://www.myweb.com?out=147,重定向到http://www.mylink.com.我可以http://www.myweb.com?out=147解决没有任何问题,但我不知道如何得到http://www.mylink.com.

小智 11

您可以使用urllib2(urllib.request在Python 3中)及其HTTPRedirectHandler来查找URL将重定向到您的位置.这是一个功能:

import urllib2

def get_redirected_url(url):
    opener = urllib2.build_opener(urllib2.HTTPRedirectHandler)
    request = opener.open(url)
    return request.url

print get_redirected_url("http://google.com/")
# prints "http://www.google.com/"
Run Code Online (Sandbox Code Playgroud)

  • 一个轻微的问题是,如果重定向重定向到另一个重定向,您将只获得最后一次重定向.例如,假设您有一个t.co(Twitter的URL缩短器)链接,它实际上指的是一个bit.ly链接,它指的是一些真实的网站,那么你将得到"真正的"网站而不是bit.ly链接.这可能是也可能不是你想要的. (3认同)
  • 如果其他寻找答案的人看到了这个问题,请求库(http://docs.python-requests.org/en/latest/index.html)不仅可以实现这一点,而且还可以实现. (3认同)

小智 3

您无法通过解析 HTML 源代码来获取重定向 URL。重定向由服务器触发,而不是由客户端触发。您需要对相关 URL 执行 HTTP 请求并检查服务器的 HTTP 响应 - 特别是 HTTP 状态代码 304(重定向)和新 URL。