如何修改“下载”功能以使用301/302重定向?

时间:2012-05-07 11:57:24

标签: python http url

def download(source_url):
    try:
        socket.setdefaulttimeout(20)
        agents = ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1041.0 Safari/535.21','Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0']
        ree = urllib2.Request(source_url)
        ree.add_header('User-Agent',random.choice(agents))
        resp = urllib2.urlopen(ree)
        htmlSource = resp.read()
        return htmlSource
    except Exception, e:
        print e
        return ""

我写了这个下载功能。如何使其与301/302一起使用?

Ex:http://tumblr.com/tagged/long-reads我的功能无法使用此网址。

2 个答案:

答案 0 :(得分:1)

首先,您必须获取HTTP响应代码,请查看this

如果代码为30x,则必须获取新网址,请查看this

然后,您可以使用新URL递归调用函数download()。

您还应该添加一个参数作为重定向计数器,以避免无限循环。

答案 1 :(得分:0)

如果返回重定向(301/2)代码,urllib2 应该自动跟随该重定向。

看看这个related question。如果它不遵循您的情况下的重定向,本文将详细检查redirects handling