Python是否会跟随重定向并下载页面?

17 浏览
0 Comments

Python是否会跟随重定向并下载页面?

我有以下的Python脚本,它运行得非常好。

import urllib2
url = 'http://abc.com' # 在这里写入url
usock = urllib2.urlopen(url)
data = usock.read()
usock.close()
print data

然而,有些我提供的URL可能会重定向2次或更多次。在加载数据之前,我该如何让Python等待重定向完成呢?

例如,当我使用上面的代码与以下链接一起使用时:

http://www.google.com/search?hl=en&q=KEYWORD&btnI=1

这相当于在Google搜索中点击“幸运之星”按钮,我会得到以下错误信息:

>>> url = 'http://www.google.com/search?hl=en&q=KEYWORD&btnI=1'
>>> usick = urllib2.urlopen(url)
Traceback (most recent call last):
  File "", line 1, in 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
>>> 

我尝试了`(url, data, timeout)`,但是我不确定应该放什么值。

编辑:

实际上,我发现如果不进行重定向,只使用第一个链接的头部,我可以获取下一个重定向的位置并将其用作我的最终链接。

0