我试图下载和保存图像从网络使用python的请求
模块。
以下是我使用的(工作)代码:
img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
f.write(img.read())
以下是使用请求的新(非工作)代码:
r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
img = r.raw.read()
with open(path, 'w') as f:
f.write(img)
您能否帮助我了解从
请求中使用响应中的哪些属性?
这个怎么样,一个快速的解决方案。
import requests
url = "http://craphound.com/images/1006884_2adf8fc7.jpg"
response = requests.get(url)
if response.status_code == 200:
with open("/Users/apple/Desktop/sample.jpg", 'wb') as f:
f.write(response.content)
从请求中获取类似文件的对象,并将其复制到文件中。这样也可以避免一次将整件事情读入内存。
import shutil
import requests
url = 'http://example.com/img.png'
response = requests.get(url, stream=True)
with open('img.png', 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
del response
您可以使用response.raw
文件对象,也可以迭代响应。
使用响应。默认情况下,raw
类文件对象不会解码压缩响应(使用GZIP或deflate)。通过将decode\u content
属性设置为True
(requests
将其设置为False
以控制解码本身),您可以强制它为您解压。然后可以使用shutil。copyfileobj()
要让Python将数据流式传输到文件对象,请执行以下操作:
import requests
import shutil
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
要在响应上迭代,请使用循环;像这样迭代可以确保数据在这个阶段被解压缩:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
这将以128字节块读取数据;如果您觉得另一个块大小效果更好,请使用响应。具有自定义块大小的iter_content()
方法:
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
注意,您需要以二进制模式打开目标文件,以确保python不会尝试为您翻译换行符。我们还设置了stream=True
,这样请求不会首先将整个图像下载到内存中。
问题内容: 我正在尝试使用的模块从网络下载并保存图像。 这是我使用的(工作)代码: 你能帮助我从响应中使用什么属性吗? 问题答案: 你可以使用对象,也可以遍历响应。 默认情况下,使用类似文件的对象不会解码压缩的响应(使用GZIP或deflate)。你可以通过将属性设置为True(requests将其设置False为控制自身解码)来强制为你解压缩。然后,你可以使用将数据流式传输到文件对象: 要遍历响
问题内容: 我正在尝试使用不带外部库的图像进行下载。这是我所拥有的,我不确定什么不起作用。 为了查看流中正在发生什么,请将该行交换为: 大概该方法在套接字输入流中不希望使用HTTP标头。但是我不确定如何删除标题。我试着用读取标题行,然后将套接字输入流传递给,但这没有用。 这是打印的字符串: 末尾的不可打印字符似乎表明标题之后是某种图像。但是如何将其转换为a 或a ?后者有一个接受输入流的构造函数,
问题内容: 这是我的代码: 这使我可以访问csv文件。我尝试了其他方法来处理下载: 这将给csv文件一个字符串: 这将打印第一行并返回错误:_csv.Error:在未引用的字段中看到换行符 这将在每行中打印一个字母,并且不会打印出整个内容: 我的问题是:在这种情况下读取CSV文件的最有效方法是什么。以及如何下载。 谢谢 问题答案: 这应该有助于: 输出样本: 答案相关的问题: 使用此功能将csv加
问题内容: 我有一个很长的页面,可在用户滚动浏览时动态加载图像。 但是,如果用户快速滚动离开页面的某个部分,我不希望图像继续加载到页面的该部分视图之外。 除了图像加载外,页面上还同时发生了许多其他请求,因此在scroll事件上触发钝化window.stop()是不可接受的。 我尝试删除并清除不再可见的图像的img src属性,但是,由于请求已经启动,因此图像会继续加载。 请记住,当用户短暂滚动经过
我试图下载一个二进制文件,并将其原始名称保存在磁盘上(linux)。 有什么想法吗?
问题内容: 我想在单击按钮时发送“ ajax下载请求”,所以我尝试了这种方式: javascript: download.php: 但是没有按预期工作,我该怎么办?先感谢您 问题答案: 2015年4月27日更新 进入HTML5场景的是download属性。它支持在Firefox和Chrome,并很快来到IE11。根据您的需求,只要您要下载的文件与您的网站位于同一来源,就可以使用它代替AJAX请求(