python从网址保存图片

Sha*_* Su 27 python image urllib download

当我使用python通过urllib2 request或urllib.urlretrieve从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())
Run Code Online (Sandbox Code Playgroud)

我想下载的图片网址是 http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg

此URL有效,我可以通过浏览器保存,但python代码将下载无法打开的文件.预览说"它可能已损坏或使用预览无法识别的文件格式".我比较了我用Python下载的图像和我通过浏览器手动下载的图像.前者的大小要小几个字节.所以似乎文件未完成,但我不知道为什么python无法完全下载它.

Vla*_*den 50

import requests

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

  • @vlad 如果我们不知道来自 URL 的图像扩展名,但我们知道它是一个图像怎么办? (4认同)
  • `pip install requests` 如果你没有 (4认同)
  • @MonaJalal,只要您有有效的合格 URL 地址,您就不必指定扩展名。 (2认同)
  • 它不适用于以下 URL;知道如何修复它吗?https://www.genome.jp/pathway/ko02024+K07173 (2认同)

Dee*_*ace 37

在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)
Run Code Online (Sandbox Code Playgroud)

  • 这会将图像保存到文件夹中,但是当我打开图像时,它说 Windows 不支持该文件格式,尽管它是一个简单的 jpg。有谁知道为什么吗? (2认同)

小智 12

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

在这里,您可以简单地传递图像 URL(从您要下载和保存图像的位置)和目录(您要在本地保存下载图像的位置,并用 .jpg 或 .png 指定图像名称)这里我给出了“本地文件名.jpg”替换为这个。

蟒蛇 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")
Run Code Online (Sandbox Code Playgroud)

如果您拥有来自 Internet 的所有图像 URL,您也可以下载多个图像。只需在 for 循环中传递这些图像 URL,代码就会自动从 Internet 下载图像。

  • 我尝试了这个,但收到错误:HTTPError:禁止。你知道这是为什么吗?我正在使用此网址:http://assets.ellosgroup.com/i/ellos/ell_1682670-01_Fs。 (2认同)
  • @Parseval,添加为我修复的代码(需要代理) ``` import urllib.request as urlopen opener = urlopen.build_opener() opener.addheaders = [('User-Agent', 'Chrome')] urlopen.install_opener (开场白)` (2认同)

小智 8

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")
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 Stackoverflow,感谢您的贡献!您能否在答案中添加解释该代码的用途及其工作原理?谢谢! (2认同)

小智 6

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)
Run Code Online (Sandbox Code Playgroud)