python 从 url 保存图片

python save image from url

我在使用 python 通过 urllib2 请求或 urllib.urlretrieve 保存来自 url 的图像时遇到问题。即图像的url是有效的。我可以使用资源管理器手动下载它。但是,当我使用python下载图片时,文件无法打开。我使用 Mac OS 预览来查看图像。谢谢!

更新:

代码如下

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代码会下载一个无法打开的文件。预览说 "It may be damaged or use a file format that Preview doesn't recognize." 我将通过 Python 下载的图像与通过浏览器手动下载的图像进行比较。前者的大小要小几个字节。所以好像是文件未完成,但不知道为什么python无法完整下载

适用于我的示例代码 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)
import requests

img_data = requests.get(image_url).content
with open('image_name.jpg', 'wb') as handler:
    handler.write(img_data)

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

对于linux以防万一;你可以使用 wget 命令

import os
url1 = 'YOUR_URL_WHATEVER'
os.system('wget {}'.format(url1))

任何想知道如何获取图像扩展名的人都可以尝试图像上字符串的拆分方法url:

str_arr = str(img_url).split('.')
img_ext = '.' + str_arr[3] #www.bigbasket.com/patanjali-atta.jpg (jpg is after 3rd dot so)
img_data = requests.get(img_url).content
with open(img_name + img_ext, 'wb') as handler:
    handler.write(img_data)

使用urlib.request包从互联网下载和保存图像是最简单的方法。

在这里,你可以简单地传递图像URL(从你想下载和保存图像的地方)和目录(你想在本地保存下载图像的地方,并给图像名称加上 . jpg 或 .png) 这里我给 "local-filename.jpg" 替换成这个.

Python 3

import urllib.request
imgURL = "http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg"

urllib.request.urlretrieve(imgURL, "D:/abc/image/local-filename.jpg")

如果您有来自互联网的所有图像 URL,您也可以下载多张图像。只需将这些图像 URL 传递给 for 循环,代码就会自动从互联网上下载图像。

下载图像并将其保存到目录

import requests

headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0",
           "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
           "Accept-Language": "en-US,en;q=0.9"
           }

img_data = requests.get(url=image_url, headers=headers).content
with open(create_dir() + "/" + 'image_name' + '.png', 'wb') as handler:
    handler.write(img_data)

用于创建目录

def create_dir():
    # Directory
    dir_ = "CountryFlags"
    # Parent Directory path
    parent_dir = os.path.dirname(os.path.realpath(__file__))
    # Path
    path = os.path.join(parent_dir, dir_)
    os.mkdir(path)
    return path