【问题标题】:Using urllib.request to write an image使用 urllib.request 写一张图片
【发布时间】:2020-12-04 12:30:09
【问题描述】:

我正在尝试使用此代码从给定的 URL 下载图像

import urllib.request

resource = urllib.request.urlretrieve("http://farm2.static.flickr.com/1184/1013364004_bcf87ed140.jpg")
output = open("file01.jpg","wb")
output.write(resource)
output.close()

但是,我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-39-43fe4522fb3b> in <module>()
     41 resource = urllib.request.urlretrieve("http://farm2.static.flickr.com/1184/1013364004_bcf87ed140.jpg")
     42 output = open("file01.jpg","wb")
---> 43 output.write(resource)
     44 output.close()

TypeError: a bytes-like object is required, not 'tuple'

我知道.write() 对象的数据类型错误,但我不知道如何将resource 输入output

【问题讨论】:

    标签: python urllib2


    【解决方案1】:

    对,像这样使用urllib.request.urlretrieve

    import urllib.request
    
    resource, headers = urllib.request.urlretrieve("http://farm2.static.flickr.com/1184/1013364004_bcf87ed140.jpg")
    image_data = open(resource, "rb").read()
    with open("file01.jpg", "wb") as f:
        f.write(image_data)
    

    PS:urllib.request.urlretrieve返回一个元组,第一个元素是临时文件的位置,你可以尝试获取临时文件的字节,并保存到一个新文件中。

    In Official document:

    以下函数和类是从 Python 2 模块 urllib(相对于 urllib2)移植而来的。它们可能会在未来的某个时候被弃用。


    所以我建议你使用urllib.request.urlopen,试试下面的代码:

    import urllib.request
    
    resource = urllib.request.urlopen("http://farm2.static.flickr.com/1184/1013364004_bcf87ed140.jpg")
    output = open("file01.jpg", "wb")
    output.write(resource.read())
    output.close()
    

    【讨论】:

    • 它会下载到我的当前目录吗?因为我没看到..
    • @oo92 当然,"file01.jpg" 是您下载的图像的路径。它应该位于当前工作文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多