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.
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)
import requests
img_data = requests.get(image_url).content
with open('image_name.jpg', 'wb') as handler:
handler.write(img_data)
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)
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")
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)
Pour Linux au cas où; vous pouvez utiliser la commande wget
import os
url1 = 'YOUR_URL_WHATEVER'
os.system('wget {}'.format(url1))