无法使用动态输入python下载图像

Posted

技术标签:

【中文标题】无法使用动态输入python下载图像【英文标题】:Cannot download images with dynamic input python 【发布时间】:2016-05-03 15:51:01 【问题描述】:

我正在尝试使用 Python 下载图像,并且在 Downloading a picture via urllib and python 中找到了一些很好的答案,但是当我尝试使用 easygui 输入网址时,图像只是在我的浏览器中打开,而不是下载图像

这是我的代码:

import easygui as eg
import os
import urllib

url = eg.enterbox('Enter url: ', 'URL Choice')
name = eg.enterbox('Enter name: ', 'Name')

def DownloadImage(URL, name):
    try:
        image = urllib.urlopen(URL)
        if image.headers.maintype == 'image':
            buf = image.read()
            path = os.getcwd() + 'C:\Users\USER\ImageGrabber\Pics'
            file_path = '%s%s' % (path,name+'.jpg')
            downloaded_image = file(file_path, 'wb')
            downloaded_image.write(buf)
            image.close()
        else:
            return False
    except:
        print 'Cannot access file'
        return False
    return True

DownloadImage(url,name)

我用过type函数,box的结果是字符串,所以不知道为什么不行

编辑:忘记包含变量

【问题讨论】:

我希望您将图像 type 提供给您的文件名。如果您的计算机无法判断二进制数据是 PNG 还是 JPEG 格式,那么简单地下载二进制数据也无济于事。 我无法重现我尝试下载此图像https://www.gravatar.com/avatar/775d6701040d31eb0a22479dec666b27?s=32&d=identicon&r=PG 的错误,它似乎工作得很好 @AkshatMahajan 是的,我有,我只是忘了把它放在我的帖子中。我应该提到的另一件事是代码每次都会跳到except语句。 @RafaelAlmeida 我假设您更改了path = os.getcwd() + 'C:\Users\USER\ImageGrabber\Pics' 行,因为据我所知,没有办法在任何计算机上工作。 哇,我刚刚注意到所有except,@IanBaker 我可以建议删除它或在其中添加traceback.print_exc(),这样您至少可以看到它给您带来的错误吗? 【参考方案1】:

您的目标路径错误os.getcwd() 为您提供当前工作目录,而您正在附加一个绝对目录。

假设您的脚本在C:\myscript.py 中,os.getcwd() 将返回C:\,并且您将附加到该C:\Users\USER\ImageGrabber\Pics,结果将是C:\C:\Users\USER\ImageGrabber\Pics,这是一个无效路径,因此会出现异常。

path='C:\Users\USER\ImageGrabber\Pics\' 
# The last '\' is important

应该可以的

编辑

我无法测试,因为我正在运行 linux,但目录可能需要像这样

path='C:/Users/USER/ImageGrabber/Pics/'

【讨论】:

我在此之前看到了@TadhgMcDonald-Jensen 的评论,但这是我的确切问题,谢谢

以上是关于无法使用动态输入python下载图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个图像作为输入传递给python脚本

如何在Python 3中使用https URL下载图像?

python从url保存图像

用python下载图像

用python中的Pillow替换动态图像中的同一行像素

如何保存或下载我在请求中获得的图像——Python