python Сохранить Изображение из url

У меня возникла проблема, когда я использую python для сохранения изображения из url либо по запросу urllib2, либо по urllib.urlretrieve. То есть url изображения является допустимым. Я мог загрузить его вручную с помощью проводника. Однако, когда я использую python для загрузки изображения, файл не может быть открыт. Я использую Mac OS preview для просмотра изображения. Спасибо!

обновление:

код выглядит следующим образом

def downloadImage(self):
    request = urllib2.Request(self.url)
    pic = urllib2.urlopen(request)
    print "downloading: " + self.url
    print self.fileName
    filePath = localSaveRoot + self.catalog  + self.fileName + Picture.postfix
    # urllib.urlretrieve(self.url, filePath)
    with open(filePath, 'wb') as localFile:
        localFile.write(pic.read())

URL-адрес изображения, который я хочу загрузить есть http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg

этот URL действителен, и я могу сохранить его через браузер, но код python загрузит файл, который не может быть открыт. Предварительный просмотр говорит, что "он может быть поврежден или использовать формат, просмотр не признает." Я сравниваю изображение, которое я загружаю Python и тот, который я загружаю вручную через браузер. Размер первого на несколько байтов меньше. Так что кажется, что файл является незавершенным, но я не знаю, почему python не может полностью загрузить его.

4 ответов


пример кода, который работает для меня на Windows:

with open('pic1.jpg', 'wb') as handle:
        response = requests.get(pic_url, stream=True)

        if not response.ok:
            print response

        for block in response.iter_content(1024):
            if not block:
                break

            handle.write(block)

import requests

img_data = requests.get(image_url).content
with open('image_name.jpg', 'wb') as handler:
    handler.write(img_data)

фрагмент кода Python для загрузки файла с url-адреса и сохранения с его именем

import requests

url = 'http://google.com/favicon.ico'
filename = url.split('/')[-1]
r = requests.get(url, allow_redirects=True)
open(filename, 'wb').write(r.content)

import random
import urllib.request

def download_image(url):
    name = random.randrange(1,100)
    fullname = str(name)+".jpg"
    urllib.request.urlretrieve(url,fullname)     
download_image("http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg")