如何使用我已经知道URL地址的Python在本地保存图像?

我知道互联网上的图像的url。

例如包含Google徽标的http://www.digimouth.com/news/media/2011/09/google-logo.jpg 。

现在,我怎样才能使用Python下载这个图像,而无需在浏览器中实际打开URL并手动保存文件。

Python 2

如果你只想把它保存为一个文件,这是一个更直接的方法:

import urllib urllib.urlretrieve("http://www.digimouth.com/news/media/2011/09/google-logo.jpg", "local-filename.jpg") 

第二个参数是应该保存文件的本地path。

Python 3

由于SergObuild议下面的代码应该与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允许我parsing任何网站的图像。 如果你会做很多networking刮(或打算使用我的工具),我build议你sudo pip install BeautifulSoup 。 有关BeautifulSoup的信息可以在这里find 。

为了方便起见,我的代码是:

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

一个适用于Python 2和Python 3的解决scheme:

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

我制作了一个扩展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 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 

这是非常简短的答案。

 import urllib urllib.urlretrieve("http://photogallery.sandesh.com/Picture.aspx?AlubumId=422040", "Abc.jpg") 
 img_data=requests.get('apod/image/1701/potw1636aN159_HST_2048.jpg') with open(str('file_name.jpg', 'wb') as handler: handler.write(img_data)