0
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 一起使用?

例如:http ://tumblr.com/tagged/long-reads我的功能不适用于此网址。

4

2 回答 2

1

首先,你必须得到 HTTP 响应代码,看看这个.

如果代码是 30x,你必须得到新的 url,看看这个

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

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

于 2012-05-07T12:06:49.973 回答
0

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

看看这个相关的问题。如果它在您的情况下不遵循重定向,本文将详细检查重定向处理

于 2012-05-07T12:07:09.837 回答