我是一个Python初学者。我正在使用 urllib2 下载文件。下载文件时,我指定一个文件名,用于将下载的文件保存在硬盘上。但是,如果我使用浏览器下载文件,则会自动提供默认文件名。
这是我的代码的简化版本:
def downloadmp3(url):
webFile = urllib2.urlopen(url)
filename = 'temp.zip'
localFile = open(filename, 'w')
localFile.write(webFile.read())
该文件下载得很好,但如果我在浏览器中输入变量“url”中存储的字符串,则下载时会为该文件指定一个默认文件名。我想将此文件名用于我下载的文件,而不是“temp.zip”或我指定的任何文件名。
如何使用 urllib2 (或其他一些 Python 库)以我下载的服务器想要的文件名保存文件?
如果有人不明白这个问题,请说出来,以便我可以尽力说得更清楚。
文件名通常由服务器通过 content-disposition 标头包含:
content-disposition: attachment; filename=foo.pdf
您可以通过以下方式访问标头
result = urllib2.urlopen(...)
result.info() <- contains the headers
i>>> import urllib2
ur>>> result = urllib2.urlopen('http://zopyx.com')
>>> print result
<addinfourl at 4302289808 whose fp = <socket._fileobject object at 0x1006dd5d0>>
>>> result.info()
<httplib.HTTPMessage instance at 0x1006fbab8>
>>> result.info().headers
['Date: Mon, 04 Apr 2011 02:08:28 GMT\r\n', 'Server: Zope/(unreleased version, python 2.4.6, linux2) ZServer/1.1 Plone/3.3.4\r\n', 'Content-Length: 15321\r\n', 'Content-Type: text/html; charset=utf-8\r\n', 'Via: 1.1 www.zopyx.com\r\n', 'Cache-Control: max-age=3600\r\n', 'Expires: Mon, 04 Apr 2011 03:08:28 GMT\r\n', 'Connection: close\r\n']
See
http://docs.python.org/library/urllib2.html http://docs.python.org/library/urllib2.html
但请注意,该标头不需要存在。否则,您需要根据请求的 URL 自行生成一个合理的名称 - 例如从 URI 的最后一个组成部分开始。
在这种情况下,请使用 Python 的 urlparse() 方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)