识别URL的文件扩展名

3
我想要提取网址的文件扩展名(尝试识别哪些链接属于我不想要的扩展列表,例如.jpg.exe等),如果存在的话。所以,我想从以下URL中提取扩展名jpg,并且在没有扩展名的情况下(例如www.example.com/file),返回空值。
我无法想到如何实现它,但我想到了一种方法,即获取最后一个点之后的所有内容,如果有扩展名,则可以查找该扩展名,如果没有扩展名,例如在www.example.com/file的例子中,它会返回com/file(如果没有在我排除的文件扩展名列表中,则是可接受的)。
可能有一种使用我不知道的软件包的替代方法,这个软件包可以确定哪些是实际的扩展名,哪些不是。(即处理URL没有实际扩展名的情况)。
2个回答

8

urlparse模块(Python 3中的urllib.parse)提供了处理URL的工具。虽然它没有提供从URL中提取文件扩展名的方法,但可以通过与os.path.splitext结合使用来实现:

from urlparse import urlparse
from os.path import splitext

def get_ext(url):
    """Return the filename extension from url, or ''."""
    parsed = urlparse(url)
    root, ext = splitext(parsed.path)
    return ext  # or ext[1:] if you don't want the leading '.'

示例用法:

>>> get_ext("www.example.com/image.jpg")
'.jpg'
>>> get_ext("https://www.example.com/page.html?foo=1&bar=2#fragment")
'.html'
>>> get_ext("https://www.example.com/resource")
''

那么,如果URL类似于“https://www.example.com/LWUERKLFsdLKFJGJNasgdfSDsdfaL”,你会得到什么? - Egor Zamotaev
@EgorZamotaev,这种情况在给出的示例中已经涵盖了。 - Zero Piraeus
不,事实并非如此。使用类似这样的请求来获取文件扩展名的简单方法是:https://dev59.com/iW4NtIcB2Jgan1znSReJ#70532887。 - Egor Zamotaev

0

如果您的URL中没有扩展名,您可以使用响应头'Content-Type'来获取扩展名,如下所示:

from urllib.request import urlopen

get_ext(url):
    resp = urlopen(url)
    ext = resp.info()['Content-Type'].split("/")[-1]
    return ext

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接