如何使用我已经知道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)