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