如何从URL下载文件并使用python请求保留其名称和元数据

时间:2016-10-20 12:09:15

标签: python python-requests

在浏览器中,如果单击下载按钮,将下载文件及其原始名称和元数据。

目前我可以下载一个包含python请求的文件,但我必须给它一个名字,下载文件中没有任何元数据可用。

我要下载的文件具有有意义的名称,但这些名称不是网址的一部分。

使用python执行此操作的最佳方法是什么?

响应中只有这些标题:

  • 服务器
  • 日期
  • 内容类型
  • 连接
  • 因人而异
  • X供电-通过
  • 附注
  • 设置Cookie
  • 到期
  • 缓存控制
  • 链接
  • 内容编码

Content-Disposition标头在r.headers中不可用,但如果我在浏览器中下载该文件,我就会看到它。

Traceback (most recent call last):
  File "download.py", line 53, in <module>
    print r.headers["Content-Disposition"]
  File "/Users/raitis.dembovskis/.virtualenvs/webcrawler/lib/python2.7/site-packages/requests/structures.py", line 54, in __getitem__
    return self._store[key.lower()][1]
KeyError: 'content-disposition'

2 个答案:

答案 0 :(得分:1)

只有当该网址的标头包含文件名信息时才能执行此操作:

result.urllib2.urlopen(url)
result.headers['content-disposition']
or
result.info()

答案 1 :(得分:0)

文件名由服务器使用Content-Disposition标头设置,如下所示:

Content-Disposition: attachment; filename="downloaded.pdf"

所以,尝试从标题中读取并提取标题中给出的文件名并使用它。

参考:

  1. How to set name of file downloaded from browser?