python - 在python中获取文件名和扩展名形成一个URL
问题描述
所以我正在使用 tkinter 和 urllib.request在 python 中制作这个下载器应用程序,我想给用户选择使用默认名称和扩展名下载文件的选项。而且我知道那里有数百万个关于如何做到这一点的教程,但我的问题是这个特定的 URL: https ://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy 我试过了许多代码,如wget 和 urlparse,但没有一个能够从其 URL 中获取此文件的扩展名。那么还有其他方法吗?wget 命令:
url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy'
test = wget.detect_filename(url)
print(test)
带有上述 URL 的输出:
images
urllib.parse 命令:
url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy'
path = urllib.parse.urlparse(url).path
ext = os.path.splitext(path)[1]
print(path)
print(ext)
带有上述 URL 的输出:
/images
网址有问题吗?
解决方案
您应该能够从响应标头中获取 MIME 类型,然后使用mimetypes获取建议的扩展
import requests, mimetypes
r = requests.get('https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy')
r.headers
{'Accept-Ranges': 'bytes', 'Content-Type': 'image/jpeg', 'Access-Control-Allow-Origin': '*', 'Content-Length': '4517', 'Date': 'Sun, 19 Apr 2020 09:23:26 GMT', 'Expires': 'Mon, 19 Apr 2021 09:23:26 GMT', 'Last-Modified': 'Fri, 15 Jan 2016 11:47:48 GMT', 'X-Content-Type-Options': 'nosniff', 'Server': 'sffe', 'X-XSS-Protection': '0', 'Cache-Control': 'public, max-age=31536000', 'Age': '840', 'Alt-Svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000'}
r.headers['Content-Type']
'image/jpeg'
mimetypes.guess_all_extensions(r.headers['Content-Type'], strict=False)
['.jpe', '.jpeg', '.jpg']
推荐阅读
- visual-studio-code - VS Code Path Intellisense 在 Mac Big Sur 11 中不起作用
- azure-ad-b2c - 使用 Javascript 调用 Azure B2C 上的登录按钮
- include - 如何在 OpenEdge Progress-4GL 中启动外部程序
- flutter - 我如何使用提供者来使用 Future Int?
- java - 在函数中使用单独的 {} 块的目的是什么?
- unity3d - Unity 中的多个或单个 NetworkManager
- java - 为什么异常处理程序中的 RestartResponseException 不会重定向到其他页面?
- debugging - 有没有dbg!Rust 中的替代方案不会将元组分成这么多行?
- gatsby - 抓取时未显示元标记
- python - 当正在进行许多还原时,虚拟机的并行还原失败 (webvirtcloud)