Как сохранить изображение локально с помощью Python, URL-адрес которого я уже знаю?
Я знаю URL-адрес изображения в Интернете.
например. http://www.digimouth.com/news/media/2011/09/google-logo.jpg, который содержит логотип Google.
Теперь, как загрузить это изображение с помощью Python без фактического открытия URL-адреса в браузере и сохранения файла вручную.
Ответы
Ответ 1
Python 2
Вот более простой способ, если все, что вы хотите сделать, это сохранить его как файл:
import urllib
urllib.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg")
Второй аргумент - это локальный путь, в котором файл должен быть сохранен.
Python 3
Как сказал SergO, приведенный ниже код должен работать с Python 3.
import urllib.request
urllib.request.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg")
Ответ 2
import urllib
resource = urllib.urlopen("http://www.digimouth.com/news/media/2011/09/google-logo.jpg")
output = open("file01.jpg","wb")
output.write(resource.read())
output.close()
file01.jpg
будет содержать ваше изображение.
Ответ 3
Я написал a script, который делает именно это, и он доступен на моем github для вашего использования.
Я использовал BeautifulSoup, чтобы разрешить мне анализировать любой сайт для изображений. Если вы будете делать много скрепок (или собираетесь использовать мой инструмент), я предлагаю вам sudo pip install BeautifulSoup
. Информация о BeautifulSoup доступна здесь.
Для удобства здесь мой код:
from bs4 import BeautifulSoup
from urllib2 import urlopen
import urllib
# use this image scraper from the location that
#you want to save scraped images to
def make_soup(url):
html = urlopen(url).read()
return BeautifulSoup(html)
def get_images(url):
soup = make_soup(url)
#this makes a list of bs4 element tags
images = [img for img in soup.findAll('img')]
print (str(len(images)) + "images found.")
print 'Downloading images to current working directory.'
#compile our unicode list of image links
image_links = [each.get('src') for each in images]
for each in image_links:
filename=each.split('/')[-1]
urllib.urlretrieve(each, filename)
return image_links
#a standard call looks like this
#get_images('http://www.wookmark.com')
Ответ 4
Решение, которое работает с Python 2 и Python 3:
try:
from urllib.request import urlretrieve # Python 3
except ImportError:
from urllib import urlretrieve # Python 2
url = "http://www.digimouth.com/news/media/2011/09/google-logo.jpg"
urlretrieve(url, "local-filename.jpg")
Ответ 5
Я сделал расширение script на Yup. script. Я исправил некоторые вещи. Теперь он обходит 403: Запрещенные проблемы. Это не сбой, когда изображение не будет восстановлено. Он пытается избежать искаженных превью. Он получает правильные абсолютные URL-адреса. Это дает больше информации. Его можно запустить с помощью аргумента из командной строки.
# getem.py
# python2 script to download all images in a given url
# use: python getem.py http://url.where.images.are
from bs4 import BeautifulSoup
import urllib2
import shutil
import requests
from urlparse import urljoin
import sys
import time
def make_soup(url):
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"})
html = urllib2.urlopen(req)
return BeautifulSoup(html, 'html.parser')
def get_images(url):
soup = make_soup(url)
images = [img for img in soup.findAll('img')]
print (str(len(images)) + " images found.")
print 'Downloading images to current working directory.'
image_links = [each.get('src') for each in images]
for each in image_links:
try:
filename = each.strip().split('/')[-1].strip()
src = urljoin(url, each)
print 'Getting: ' + filename
response = requests.get(src, stream=True)
# delay to avoid corrupted previews
time.sleep(1)
with open(filename, 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
except:
print ' An error occured. Continuing.'
print 'Done.'
if __name__ == '__main__':
url = sys.argv[1]
get_images(url)
Ответ 6
Python 3
urllib.request - Расширяемая библиотека для открытия URL-адресов
from urllib.error import HTTPError
from urllib.request import urlretrieve
try:
urlretrieve(image_url, image_local_path)
except FileNotFoundError as err:
print(err) # something wrong with local path
except HTTPError as err:
print(err) # something wrong with url
Ответ 7
Это очень короткий ответ.
import urllib
urllib.urlretrieve("http://photogallery.sandesh.com/Picture.aspx?AlubumId=422040", "Abc.jpg")
Ответ 8
img_data=requests.get('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg')
with open(str('file_name.jpg', 'wb') as handler:
handler.write(img_data)