python - 在 Python 中使用 urllib2。如何获取我正在下载的文件的名称?

标签 python download default filenames urllib2

我是一名 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 header 包含:

content-disposition: attachment; filename=foo.pdf

您可以通过

访问 header
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']

http://docs.python.org/library/urllib2.html

但请注意,此 header 不需要存在。否则,您需要自己从请求的 URL 中生成一个合理的名称 - 例如来自 URI 的最后一个组件。 在这种情况下使用 Python 的 urlparse() 方法。

关于python - 在 Python 中使用 urllib2。如何获取我正在下载的文件的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533880/

相关文章:

javascript - meteor S3下载

javascript - 无法在 Angular4 GET 响应中查看 'Content-Disposition' header

c++ - 在开关的默认标签中放置什么?

git - 如何让 Sublime Text 成为 Git 的默认编辑器?

python - 如何在 Python 中进行非线性复根查找

python - 是否可以使 matplotlib 图形轴等比例缩放?

video - 如何编写一个从网页下载所有视频并根据创建日期对它们进行排序的程序?

r - 强制 R 不使用指数表示法(例如 e+10)?

python - 以不寻常的方式对 Pandas 数据框进行分组

python - 为什么python中的递归这么慢?