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我的功能无法使用此网址。
答案 0 :(得分:1)
首先,您必须获取HTTP响应代码,请查看this。
如果代码为30x,则必须获取新网址,请查看this。
然后,您可以使用新URL递归调用函数download()。
您还应该添加一个参数作为重定向计数器,以避免无限循环。
答案 1 :(得分:0)
如果返回重定向(301/2)代码,urllib2 应该自动跟随该重定向。
看看这个related question。如果它不遵循您的情况下的重定向,本文将详细检查redirects handling。