web-dev-qa-db-fra.com

python enregistrer l'image depuis l'URL

J'ai un problème lorsque j'utilise python pour enregistrer une image à partir de l'url, soit par une requête urllib2, soit par urllib.urlretrieve. C'est l'URL de l'image est valide. Cependant, lorsque j'utilise python pour télécharger l'image, le fichier ne peut pas être ouvert. J'utilise l'aperçu Mac OS pour afficher l'image. Merci!

MISE À JOUR:

Le code est comme suit

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

L'URL de l'image que je veux télécharger est http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg

Cette URL est valide et je peux l'enregistrer via le navigateur, mais le code python) téléchargerait un fichier qui ne peut pas être ouvert. L'aperçu indique "Il est peut-être endommagé ou utilise un format 'reconnais pas. "Je compare l'image que je télécharge avec Python et celle que je télécharge manuellement via le navigateur. La taille de l'image précédente est plus petite de plusieurs octets. Le fichier est incomplet, mais je ne sais pas pourquoi python ne peut pas le télécharger complètement.

23
Shaoxiang Su

Un exemple de code qui fonctionne pour moi sous 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)
35
DeepSpace
import requests

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

Extrait de code Python permettant de télécharger un fichier à partir d'une URL et de l'enregistrer sous son nom

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)
6
Basil Jose
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")
2
learner
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)
1
Charoun crz

Pour Linux au cas où; vous pouvez utiliser la commande wget

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