当我运行以下代码时:
url = 'http://www.nytimes.com/2011/11/15/arts/music/new-music-from-caveman-los-campesinos-and-the-fall.html?_r=0'
try:
handle = urllib2.urlopen(url).info()
except urllib2.HTTPError, e:
print(e.code)
出现错误,print e.code
打印303
。
如果我使用Chrome或Firefox请求此网址,则可以正常使用。
任何人都可以提供帮助? 感谢
答案 0 :(得分:4)
您需要处理重定向,因为HTTP 303 is a "See Other"响应。内容所在的位置将在Location
标题中提供给您:
>>> e.headers['Location']
'http://www-nc.nytimes.com/2011/11/15/arts/music/new-music-from-caveman-los-campesinos-and-the-fall.html?=_r=6&'
现在,今天使用urllib
/ urllib2
真的要求痛苦,你应该做的是使用优秀的requests
库,它将为你处理一切。
我认为我们可以说使用requests
是在Python中执行HTTP的正确方法:
>>> res = requests.get(url)
<Response [200]>
>>> print res.text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" # And so on
答案 1 :(得分:0)
303是重定向。您的浏览器会自动处理它,urllib2需要一些哄骗。
检查一下这是一个非常好的解释:
http://www.diveintopython.net/http_web_services/redirects.html