Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让python从internet成功下载大型图像_Python_Image_Python 3.x_Urllib - Fatal编程技术网

如何让python从internet成功下载大型图像

如何让python从internet成功下载大型图像,python,image,python-3.x,urllib,Python,Image,Python 3.x,Urllib,所以我一直在用 urllib.request.urlretrieve(URL, FILENAME) 下载互联网上的图片。它工作得很好,但在某些图像上失败。它出现故障的似乎是较大的图像-例如。它可以很好地下载这些图片,但当我尝试打开这些文件时,photo viewer会显示错误“windows photo viewer无法打开此图片,因为文件似乎已损坏或太大” 它无法下载这些文件的原因可能是什么?我如何解决这个问题 编辑:在进一步研究之后,我认为问题不在于大图片——它设法下载了更大的图片。它似乎

所以我一直在用

urllib.request.urlretrieve(URL, FILENAME)
下载互联网上的图片。它工作得很好,但在某些图像上失败。它出现故障的似乎是较大的图像-例如。它可以很好地下载这些图片,但当我尝试打开这些文件时,photo viewer会显示错误“windows photo viewer无法打开此图片,因为文件似乎已损坏或太大”

它无法下载这些文件的原因可能是什么?我如何解决这个问题


编辑:在进一步研究之后,我认为问题不在于大图片——它设法下载了更大的图片。它似乎只是一些随机的,它永远无法下载,每当我再次运行脚本。现在我更困惑了

在过去,我用这个代码从互联网上复制。我在处理大文件时没有遇到任何问题

def download(url):
    file_name = raw_input("Name: ")
    u = urllib2.urlopen(url)
    f = open(file_name, 'wb')
    meta = u.info()
    file_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, file_size)  
    file_size_dl = 0
    block_size = 8192
    while True:
        buffer = u.read(block_size)
        if not buffer:
            break 

在过去,我使用这个代码从互联网上复制。我在处理大文件时没有遇到任何问题

def download(url):
    file_name = raw_input("Name: ")
    u = urllib2.urlopen(url)
    f = open(file_name, 'wb')
    meta = u.info()
    file_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, file_size)  
    file_size_dl = 0
    block_size = 8192
    while True:
        buffer = u.read(block_size)
        if not buffer:
            break 

以下是Python 3的示例代码(在Windows 7中测试):

为完整起见,以下是Python 2中的等效代码:

import urllib2

def download_very_big_image():
    url = 'http://i.imgur.com/DEKdmba.jpg'
    filename = 'C://big_image.jpg'
    conn = urllib2.urlopen(url)
    output = open(filename, 'wb') #binary flag needed for Windows
    output.write(conn.read())
    output.close()

以下是Python 3的示例代码(在Windows 7中测试):

为完整起见,以下是Python 2中的等效代码:

import urllib2

def download_very_big_image():
    url = 'http://i.imgur.com/DEKdmba.jpg'
    filename = 'C://big_image.jpg'
    conn = urllib2.urlopen(url)
    output = open(filename, 'wb') #binary flag needed for Windows
    output.write(conn.read())
    output.close()

这应该有效:使用
请求
模块:

import requests

img_url = 'http://i.imgur.com/DEKdmba.jpg'
img_name = img_url.split('/')[-1]
img_data = requests.get(img_url).content
with open(img_name, 'wb') as handler:
    handler.write(img_data)

这应该有效:使用
请求
模块:

import requests

img_url = 'http://i.imgur.com/DEKdmba.jpg'
img_name = img_url.split('/')[-1]
img_data = requests.get(img_url).content
with open(img_name, 'wb') as handler:
    handler.write(img_data)


这并不一定意味着Python代码被破坏。这可能是因为Windows Photo Viewer本身无法打开图像,但浏览器在这方面做得更好。正如@AHuman所发布的,请使用urlopen而不是urlretrieve。HTH.@SimeonVisser我可以手动下载该图像,并在照片查看器中打开它。而@AnneLagang我认为Python 3中没有相同的功能。使用urlopen添加了Python 3示例代码。这并不一定意味着Python代码被破坏。这可能是因为Windows Photo Viewer本身无法打开图像,但浏览器在这方面做得更好。正如@AHuman所发布的,请使用urlopen而不是urlretrieve。HTH.@SimeonVisser我可以手动下载该图像,并在照片查看器中打开它。而且@AnneLagang我认为Python 3中没有相同的功能。使用urlopen添加了示例Python 3代码。你比我强!我正要告诉OP使用urlopen而不是urlretrieve.hmm,python 3有什么用吗?如何指定它使用urlopen保存的位置?@user3662991您是在谈论文件还是url?@user3662991不只是写文件名,您可以指定添加完整路径,并将其作为open中的第一个参数传递(filenameWithPath,'wb').你赢了我!我正要告诉OP使用urlopen而不是urlretrieve.hmm,python 3有什么用吗?如何指定它使用urlopen保存的位置?@user3662991您是在谈论文件还是url?@user3662991不只是写文件名,您可以指定添加完整路径,并将其作为open中的第一个参数传递(filenameWithPath,'wb')。