Как сохранить изображение локально с помощью Python, чей URL-адрес я уже знаю?
Я знаю URL-адрес изображения в Интернете.
например http://www.digimouth.com/news/media/2011/09/google-logo.jpg, который содержит логотип Google.
теперь, как я могу загрузить это изображение с помощью Python без фактического открытия URL-адреса в браузере и сохранения файла вручную.
8 ответов:
Python 2
вот более простой способ, если все вы хотите сделать, это сохранить его как файл:
import urllib urllib.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg")второй аргумент-это локальный путь, где файл должен быть сохранен.
Python 3
как Серго предложил код ниже должен работать с Python 3.
import urllib.request urllib.request.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg")
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будет содержать ваше изображение.
я писал скрипт, который делает именно это, и он доступен на моем 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')
Я сделал скрипт, расширяющийся на Yup.- это сценарий. Я кое-что починил. Теперь он будет обходить 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)
решение, которое работает с 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")или, если дополнительное требование
requestsприемлемо, и если это HTTP (S) URL:def load_requests(source_url, sink_path): """ Load a file from an URL (e.g. http). Parameters ---------- source_url : str Where to load the file from. sink_path : str Where the loaded file is stored. """ import requests r = requests.get(source_url, stream=True) if r.status_code == 200: with open(sink_path, 'wb') as f: for chunk in r: f.write(chunk)
Python 3
urllib.запрос-расширяемая библиотека для открытия 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
Это очень короткий ответ.
import urllib urllib.urlretrieve("http://photogallery.sandesh.com/Picture.aspx?AlubumId=422040", "Abc.jpg")
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)
Comments