Python сохранить изображение из URL

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

UPDATE:

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

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 загрузит файл, который нельзя открыть. Предварительный просмотр говорит: "Возможно, он поврежден или использует формат файла, который не распознает Preview". Я сравниваю изображение, которое я загружаю с помощью Python, и тот, который я загружаю вручную через браузер. Размер первого меньше на несколько байт. Таким образом, кажется, что файл не завершен, но я не знаю, почему python не может его полностью загрузить.

Ответ 1

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

import requests

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)

Ответ 2

import requests

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

Ответ 3

Фрагмент кода 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)

Ответ 4

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")

Ответ 5

import urllib.request
import os

img_url = "https://betanews.com/wp-content/uploads/2017/09/firefox-logo.jpg"
img_name = os.path.basename(img_url)
urllib.request.urlretrieve(img_url,img_name)

Ответ 6

Для Linux в случае; Вы можете использовать команду Wget

import os
url1 = 'YOUR_URL_WHATEVER'
os.system('wget {}'.format(url1))