3

当我运行以下代码时:

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 请求此 URL,它可以正常工作。

任何人都可以帮忙吗?谢谢

4

2 回答 2

4

您将需要处理重定向,因为HTTP 303 是“查看其他”响应。内容所在的位置将在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库,它会为你处理一切。

我认为我们可以说 usingrequests是在 Python 中执行 HTTP 的正确方法:

>>> res = requests.get(url)
<Response [200]>
>>> print res.text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" # And so on
于 2012-12-13T15:16:56.213 回答
0

303 是重定向。您的浏览器会自动处理它,urllib2 需要一些哄骗。

看看这个有一个很好的解释:

http://www.diveintopython.net/http_web_services/redirects.html

于 2012-12-13T15:14:48.243 回答