无法从 requests.get 获取图像

问题描述

我有 2 张图像要在 python 中使用一些逻辑进行处理。 这是图像的 2 个 URL:

https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png https://www.hogan.com/fashion/hogan/HXW4350DM10NCR0RSZ/HXW4350DM10NCR0RSZ-02.png

为了获得这些图像,我编写了以下脚本:

import requests
from PIL import Image
from io import BytesIO

url = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"

response = requests.get(url)
img = Image.open(BytesIO(response.content))

img.show()

这段代码没问题,我正确地得到了图像。

但是,对于第二张图片,我无法从 get 方法收到任何响应。


url = "https://www.hogan.com/fashion/hogan/HXW4350DM10NCR0RSZ/HXW4350DM10NCR0RSZ-02.png"

response = requests.get(url)
img = Image.open(BytesIO(response.content))

img.show()

任何帮助将不胜感激。

蟒蛇 3.9.4 请求 2.25.1

解决方法

那是因为第二个网址需要一个重要的标头参数user-agent

让我们将其添加到您的请求中:

import requests
from PIL import Image
from io import BytesIO

url = "https://www.hogan.com/fashion/hogan/HXW4350DM10NCR0RSZ/HXW4350DM10NCR0RSZ-02.png"

headers = {
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/87.0.4280.141 Safari/537.36"
}
response = requests.get(url,headers=headers)
img = Image.open(BytesIO(response.content))

img.show()

我们如何知道某个网站是否需要用户代理?
我们只是不知道,但我们假设如果浏览器可以正确获取图像而一个简单的请求没有,那么它就缺少一些东西,并且大多数网站都需要标头来验证您的请求