【问题标题】:Download file using python without knowing its extension. - content-type - stream在不知道扩展名的情况下使用 python 下载文件。 - 内容类型 - 流
【发布时间】:2018-09-24 07:27:35
【问题描述】:

嘿,我刚刚做了一些研究,发现我可以从以 filename.extension 结尾的 url 下载图像,例如 000000.jpeg。我现在想知道如何下载没有任何扩展名的图片。 这是我要下载图片的网址http://books.google.com/books/content?id=i2xKGwAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api 当我将 url 直接放到浏览器中时,它会显示一个图像

此外,这是我尝试过的:

from six.moves import urllib

thumbnail='http://books.google.com/books/content?id=i2xKGwAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api'

img=urllib.request.Request(thumbnail)
pic=urllib.request.urlopen(img)
pic=urllib.request.urlopen(img).read()

任何帮助将不胜感激

【问题讨论】:

  • 您必须查看内容类型标头,然后将其转换为文件结尾。
  • 如果您查看前 20 个字节左右,您会看到 JFIF 作为其魔术字符串的一部分...这是 jpg 的标识符...

标签: python python-3.x stream http-headers python-requests


【解决方案1】:

这是一种使用 HTTP 响应标头的方法:

import requests
import time

r = requests.get("http://books.google.com/books/content?id=i2xKGwAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api", stream=True)
ext = r.headers['content-type'].split('/')[-1] # converts response headers mime type to an extension (may not work with everything)
with open("%s.%s" % (time.time(), ext), 'wb') as f: # open the file to write as binary - replace 'wb' with 'w' for text files
    for chunk in r.iter_content(1024): # iterate on stream using 1KB packets
        f.write(chunk) # write the file

【讨论】:

  • 感谢您的回复,但我想获取图像文件。您的代码仅打印 1024 个数字。有没有办法获取文件?
  • 这会下载文件。我很惊讶它打印任何东西。你在用 python2 吗?
  • 我得到了文件,Thanks.i 正在 python shell 中测试代码,这就是为什么我有点困惑,我在哪里可以获得有关标题的信息
  • 您应该看看 HTTP 响应标头。我喜欢 MDN 文档:developer.mozilla.org/en-US/docs/Web/HTTP/Headers
  • 很好,感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 2021-09-06
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2016-05-18
相关资源
最近更新 更多