我想创建一个简单的基于Python的实用程序,它可以从网页获取所有下载URL并下载内容。我发现了这样做的几种方法,我发现的最好的方法是“urllib”。但不幸的是我的问题是我无法保存那些具有适当扩展为网址看起来像下面,从URL中检索文件并将其保存为正确的扩展名
http://example.com/2w3xa75
但内容可以在不同的格式,即.MP3,.OGG等
如何识别类型并使用正确的扩展名保存这些内容。
我想创建一个简单的基于Python的实用程序,它可以从网页获取所有下载URL并下载内容。我发现了这样做的几种方法,我发现的最好的方法是“urllib”。但不幸的是我的问题是我无法保存那些具有适当扩展为网址看起来像下面,从URL中检索文件并将其保存为正确的扩展名
http://example.com/2w3xa75
但内容可以在不同的格式,即.MP3,.OGG等
如何识别类型并使用正确的扩展名保存这些内容。
的想法是提取Content-Type
HTTP标头,并要求mimetypes
猜测相关的扩展。
我会用这个问题的URL为例(它不提供扩展名)
import requests
import mimetypes
query = requests.get('https://stackoverflow.com/questions/45488909/retrieve-files-from-urls-and-save-those-with-correct-extension')
content_type = query.headers['Content-Type']
print(mimetypes.guess_extension(content_type.split(';')[0]))
输出:
.html
一个Content-Type
标题是这样的:'text/html; charset=utf-8'
,但只有第一部分( text/html
)预计由mimetypes.guess_extension
,这就是为什么我分裂它。
您可以尝试使用[urllib.request.urlretrieve](https://docs.python.org/dev/library/urllib.request.html#urllib.request.urlretrieve) – TheDetective
您可以将响应标题'Content -Type“设置为正确的扩展名,假设它被设置为文件类型而不是八位字节流。 – T4rk1n