无法从 requests.get 获取图像

Cannot get an image from requests.get

我想在 python 中使用一些逻辑处理 2 个图像。 这里是图片的 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()

如有任何帮助,我们将不胜感激。

python 3.9.4 请求 2.25.1

那是因为第二个url需要一个重要的header参数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()

我们如何知道某些网站是否需要 User-agent?
我们只是不知道,但我们假设如果浏览器可以正确获取图像而一个简单的请求不能,则它缺少一些东西,并且大多数网站需要 headers 来验证您的请求