当前位置: 首页 > 知识库问答 >
问题:

使用Python从url下载图像时出现问题

秦时铭
2023-03-14

我试图下载一个图像从一个URL与Python使用请求和Shutil库。我的代码如下:

import requests
import shutil

image_url = "https://www.metmuseum.org/-/media/images/visit/met-fifth-avenue/fifthave_teaser.jpg"

with open("image1.jpg", "wb") as file:
    response = requests.get(image_url, stream=True)
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, file)
file.close()

这段代码适用于我尝试过的大多数其他图像URL(例如:https://tinyjpg.com/images/social/website.jpg)但是,对于代码中的图像url,创建了一个1kb的文件,其中有一个错误:“看起来我们不支持此文件格式。”

我也尝试过:

import urllib
urllib.request.urlretrieve(image_url, "image1.jpg)

可以使用Seleniumwire执行此操作-我使用的是驱动程序。请求获取站点发出的所有请求的列表,然后循环这些请求,直到我收到请求。回答包含文件类型(.jpg)的标头。似乎有两个请求具有相同的url(第一个请求的内容类型为“text/html”,第二个请求的内容类型为“image/jpg”)。

我想在不加载WebDriver的情况下运行此程序。有没有办法使用requests功能下载这样的图像?

共有1个答案

戚翰飞
2023-03-14

如果您查看response.text,您将看到服务器不喜欢您的请求头,并认为您是机器人:

'<html>\r\n<head>\r\n<META NAME="robots" CONTENT="noindex,nofollow">\r\n<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">\r\n</script>\r\n<body>\r\n</body></html>\r\n'

但是,如果您提供了正确的用户代理标头,则其响应将发生更改,您可以继续保存文件:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'} 

response = requests.get(image_url, stream=True, headers=headers)

with open("image1.jpg", "bw") as file:
    file.write(response.content)

因此,您必须在请求标头中模拟用户代理才能获得此映像。

另外,with是一个上下文管理器,它已经为您关闭了文件。

 类似资料:
  • 我用python scrapy编写了一个脚本,从一个网站下载一些图片。当我运行我的脚本时,我可以在控制台中看到图像的链接(它们都是格式)。然而,当我打开下载完成时应该保存图像的文件夹时,我什么也没有看到。我犯错的地方? 这是我的蜘蛛(我正在从Sublime文本编辑器运行): 这是我在中为要保存的图像定义的内容: 为了让事情更清楚: 我希望保存图像的文件夹名为,我已将其放在项目下的文件夹中。 文件夹

  • 问题内容: 我正在尝试使用我的应用程序中的URL和按钮下载图像。当我在手机上运行它时,我无法下载该图像。任何人都可以指出这个问题。我在这里先向您的帮助表示感谢 :) 这是我的代码。 问题答案: 您可以通过两种方式从url下载图像 1。您 可以使用Glide库从url加载图像,看下面的代码,它可以轻松地为您提供帮助 编译这个库 而不是像这样加载图像 2。如果您不想使用第三方库,请尝试此 创建一个异步

  • 我在下载图像和更新ImageView时遇到问题,我正在使用ExecutorServices下载图像,但我面临的问题是,作为场景,我正在使用基本适配器在列表中显示Imageview。图像被下载,但这两个图像都只在firstImage View中更新。 所以位图在同一个imageView中得到了更新,有人遇到过类似的问题吗 例如,我正在下载2个图像,它正在创建2个ImageDownloader实例,所

  • 问题内容: 在我的应用程序上,我使用通用的图像下载器BaseImageDownloader类同步加载画廊的内容。对于来自Imageloader.getInstance()。loadImage异步函数的相同内容,它不会给出任何安全异常并按原样加载图像,但是当我尝试使用BaseImageDownloader同步下载它(而且Imageloader.getInstance()。loadImage()相同)

  • 这是我为从url下载图像而编写的代码,但使用java.io.FileNotFoundException重新引用响应代码400

  • 当我尝试使用带有Scrapy的蜘蛛下载图像时,会出现以下错误。 就我所能理解的而言,我好像在某个地方的url中少了一个“h”?但我一辈子也看不出在哪里。如果我不想下载图片,一切都正常。但是一旦我将适当的代码添加到下面的四个文件中,我就无法使任何东西正常工作。谁能帮我弄明白这个错误吗? items.py 设置.py pipelines.py products.py(我的蜘蛛) 如有任何帮助,将不胜感