Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-从url获取图像名称和扩展名,但不以文件扩展名结尾_Python_Urlparse - Fatal编程技术网

Python-从url获取图像名称和扩展名,但不以文件扩展名结尾

Python-从url获取图像名称和扩展名,但不以文件扩展名结尾,python,urlparse,Python,Urlparse,基本上,我的目标是通过url获取图像的文件名、扩展名和内容。我的功能应该适用于这两个URL: 简单案例: 硬大小写(不以filename.extension结尾): 目前,我所拥有的是这样的: from os.path import splitext, basename def get_filename_from_url(url): result = urllib.request.urlretrieve(url) filename, file_ext = spl

基本上,我的目标是通过url获取图像的文件名、扩展名和内容。我的功能应该适用于这两个URL:

简单案例:

硬大小写(不以filename.extension结尾):

目前,我所拥有的是这样的:

from os.path import splitext, basename

def get_filename_from_url(url):
       result = urllib.request.urlretrieve(url)
       filename, file_ext = splitext(basename(result.path))
       print(filename, file_ext)
这对于简单的情况很有效。但很显然,对于硬壳url,没有解决方案。但是我有一种感觉,我可以使用python的
请求
模块,解析头来找到mimetype,然后使用同一模块的guesstype功能来提取必要的数据。所以我继续尝试这个:

import requests

response = requests.get(url, stream=True)
,似乎有人在描述线索,说

但问题是,使用硬壳url,我在
响应
dict项中得到了一些奇怪的东西,可能我的关键问题是,我不知道解析响应头的正确方法来提取我需要的内容

我尝试了使用URLPrasse的第三种方法:

from urllib.parse import urlparse
result = urlparse(self.url)
print(os.path.basename(a.path)) # 'photo-1472214103451-9374bd1c798e'
这会产生文件名,但我还是错过了这里的扩展名

理想的解决方案是一次性获得文件名、文件扩展名和文件内容,最好能够验证url是否确实包含图像,而不是其他内容

UPD


result=urllib.request.urlretrieve(self.url)
中的result元素似乎包含
内容类型,但我不知道如何正确提取它

一种方法是查询内容类型:

>>> from urllib.request import urlopen
>>> response = urlopen(url)
>>> response.info().get_content_type()
'image/jpeg'
或者在编辑中使用
urlretrieve

>>> response = urllib.request.urlretrieve(url)
>>> response[1].get_content_type()

一种方法是查询内容类型:

>>> from urllib.request import urlopen
>>> response = urlopen(url)
>>> response.info().get_content_type()
'image/jpeg'
或者在编辑中使用
urlretrieve

>>> response = urllib.request.urlretrieve(url)
>>> response[1].get_content_type()

如果不获取该文件,似乎不可能知道其中的内容,除非有一个mimetypes等价物可以在链接上工作。关于这一点:如果不获取文件,似乎不可能知道其中包含什么,除非有一个mimetypes等价物可以在链接上工作。关于这一点:你认为
响应[1]获取内容类型().split('/')[0]==“image”
是验证url是否包含图像的合适方法吗?@Edgar适用于大多数现代网站。如果没有内容类型,您可以使用路径检查。如果两者都不存在,那么任何人(包括您的浏览器)如何知道内容是什么?如果他们想要找到他们的东西,这取决于主持人。@kanbanus,你的意思是我应该按照我在评论中说的去做,如果没有内容类型,把它放在一个路径上检查吗?你认为
response[1].get_content_type().split('/')[0]=='image'
对于大多数现代网站来说,url是否包含图像是一个合适的验证?@Edgar。如果没有内容类型,您可以使用路径检查。如果两者都不存在,那么任何人(包括您的浏览器)如何知道内容是什么?如果他们想找到他们的东西,这取决于主人。@kanbanus,你的意思是我应该按照我在评论中说的去做,如果没有内容类型,把包放在一个路径上检查它吗?