首页 > 解决方案 > 如何在 Python 中找到具有非明显文件类型的 url 中的图像的文件类型

问题描述

像 googleusercontent 这样的某些 CDN 不会(显然)在其 url 中对图像的文件名进行编码,因此您无法像这里的其他答案所建议的那样简单地使用字符串操作来获取文件类型。知道这一点,怎么能说出来

https://lh3.googleusercontent.com/pw/AM-JKLURvu-Ro2N3c1vm1PTM3a7Ae5nG3LNWynuKNEeFNBMwH_uWLQJe0q0HmaOzKC0k0gRba10SbonLaheGcNpxROnCenf1YJnzDC3jL-N9fTtZ7u0q5Z-3iURXtrt4GlyeEI3t4KWxprFDqFWRO29sJc8=w440-h248-no

是一个 gif 而

https://lh3.googleusercontent.com/pw/AM-JKLXk2WxafqHOi0ZrETUh2vUNkiLyYW1jRmAQsHBmYyVP7Le-KBCSVASCgO2C6_3QbW3LcLYOV_8OefPafyz2i4g8nqpw8xZnIhzDdemd5dFPS5A7dVAGQWx9DIy5aYOGuh06hTrmfhF9mZmITjjTwuc=w1200-h600-no

是.jpg

标签: pythonpython-3.xfileurlfile-type

解决方案


基于对这个问题的回答,您可以尝试:

import requests
from PIL import Image       # pillow package
from io import BytesIO

url = "your link"

image = Image.open( BytesIO( requests.get( url ).content))
file_type = image.format

不过,这需要下载整个文件。如果您希望批量执行此操作,您可能想探索上面评论中提到“魔术字节”的选项......

编辑:您还可以尝试从对您的 url 的响应的标题中获取图像类型:

headers = requests.get(url).headers
file_type =headers.get('Content-Type', "nope/nope").split("/")[1]
# Will print 'nope' if 'Content-Type' header isn't found
print(file_type)
# Will print 'gif' or 'jpeg' for your listed urls

编辑2:如果你真的只关心链接的文件类型而不是文件本身,你可以使用head方法而不是get请求模块的方法。它更快:

headers = requests.head(url).headers
file_type =headers.get('Content-Type', "nope/nope").split("/")[1]

推荐阅读